8

我是 JavaScript 新手,在互联网上发现了这个验证给定电子邮件的 JavaScript 代码(代码没有问题)-

<html>
<h2>Email Validation</h2>
<script language = "Javascript">
function checkEmail(emailId) {
if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(emailId)){
document.write("You have entered valid email.");
return true;
}    
return false;
}

function ValidateEmail(){
    var emailID=document.form.email;

    if ((emailID.value==null)||(emailID.value=="")){
        alert("Please Enter your Email ID")
        emailID.focus()
        return false
    }

    if (checkEmail(emailID.value)==false){
        emailID.value=""
        alert("Invalid Email Adderess");
        emailID.focus()
        return false
    }
        alert('valid');
        return true
 }
</script>

<form name="form" method="post" onSubmit="return ValidateEmail()">    
Enter an Email Address : <input type="text" name="email" size="30"><br>    
<input type="submit" name="Submit" value="Submit">    
</form>

</html>

我对代码没有任何问题,但不知何故我无法理解正则表达式的/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/含义。我不明白正则表达式的每一部分是什么意思。请赐教。

4

8 回答 8

19
  1. 两个正斜杠 /.../ 包含一个正则表达式。

  2. 前导 ^ 和尾随 $ 分别匹配输入字符串的开头和结尾。也就是说,整个输入字符串应该与这个正则表达式匹配,而不是输入字符串的一部分。

  3. \w+ 匹配 1 个或多个单词字符(az、AZ、0-9 和下划线)。

  4. [.-] 匹配字符。或者 -。我们需要使用 . 来代表。作为 。在正则表达式中有特殊含义。\ 被称为转义码,它恢复了后面字符的原始字面意思。

  5. [.-]?匹配 0 或 1 次出现的 [.-]。

  6. 同样,\w+ 匹配 1 个或多个单词字符。

  7. ([.-]?\w+)* 匹配 0 次或多次出现的 [.-]?\w+。

  8. 子表达式 \w+([.-]?\w+)* 用于匹配电子邮件中的用户名,位于 @ 符号之前。它以至少一个单词字符(az、AZ、0-9 和下划线)开头,后跟多个单词字符或 . 或者 -。然而,一个 . 或 - 后面必须跟一个单词字符(az、AZ、0-9 和下划线)。也就是说,字符串不能包含“..”、“--”、“.-”或“-.”。有效字符串的示例是“a.1-2-3”。

  9. @ 匹配自身。

  10. 同样,子表达式 \w+([.-]?\w+)* 用于匹配电子邮件域名,其模式与上述用户名相同。

  11. 子表达式 .\w{2,3} 匹配 a 。后跟两个或三个单词字符,例如“.com”、“.edu”、“.us”、“.uk”、“.co”。

  12. (.\w{2,3})+ 指定上述子表达式应出现一次或多次,例如“.com”、“.co.uk”、“.edu.sg”等。

参考

于 2013-02-22T05:00:47.500 回答
3

尝试这个

E-mail: <input type="email" name="usremail">

它对我有用

于 2013-03-21T12:37:38.320 回答
3

在这里试试REGEX

你可以找到详细的解释。

于 2013-02-22T04:57:29.543 回答
3

下面是正则表达式的分解:


/^ => 一行的开头

\w+=> 任何单词(字母、数字和下划线)重复 1 次或多次

([\.-]?\w+)*=> 一[可选句点 (.) 或破折号 (-) 后跟任何重复一次或多次的单词],可以重复 0 次或多次

@\w+=> at 符号 (@) 后跟任何重复一次或多次的单词

([\.-]?\w+)*=> 一[一个可选的句点或破折号跟随任何重复 1 次或多次的单词],可以重复 0 次或多次

(\.\w{2,3})+=> 一可以重复1次或多次的[句号后跟任何可以重复2-3次的单词]

$/=> 一行的结尾


顺便说一句,这是Codular上提供的一个非常好的正则表达式简介

于 2013-02-22T05:11:12.413 回答
2

干得好。正则表达式的可视化工具

正则表达式可视化器JS Fiddle 正则表达式解释

于 2013-02-22T04:56:11.653 回答
2

此验证码对于电子邮件地址是错误的。特别是不允许使用 first+last@domain.com 形式的地址。这是在许多商业网站上发现的普遍错误(但不是 stackoverflow - 恭喜!)。

于 2016-03-29T13:52:10.570 回答
1
/^(\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+[,;]?[ ]?)+$/

这个小美将允许您在字符串中输入一个或多个电子邮件地址,以逗号或分号结尾,后跟可选空格。:)

于 2013-05-19T13:03:44.593 回答
0
function validchat(){
    $('#btn-input-email').blur(function() {
        if($(this).val() != '') {
            var pattern = /^([a-z0-9_\.-])+@[a-z0-9-]+\.([a-z]{2,4}\.)?[a-z]{2,4}$/i;
            if(pattern.test($(this).val())){
                $(this).css({'border' : '1px solid #569b44'});
                $('#valid').text('');
            } else {
                $(this).css({'border' : '1px solid #ff0000'});
                $('#valid').text('Не верно');
            }
        } else {
            $(this).css({'border' : '1px solid #ff0000'});
            $('#valid').text('Поле email не должно быть пустым');
        }
    });
    $("#btn-input-text").blur(function() {
        var textlength = $(this).val().trim().length;
        if( textlength < 2 ){
            $(this).css({'border' : '1px solid #ff0000'});
            $('#validtext').text('Минимум 2 символ');
        }else{
            $(this).css({'border' : '1px solid #569b44'});
            $('#validtext').text('');
        }
    });
    var valid = $('#valid').text();
    var validtext = $('#validtext').text();
    if((!valid || valid == '') && (!validtext || validtext == '')){
        return true;
    }
}
validchat();
function AjaxChat () {
    $('#btn-input-email , #btn-input-text').blur();
    var valid = validchat();
    if(valid){
        var email = $('#btn-input-email').val();
        var text  = $('#btn-input-text').val();

        var data = {
            email:email,
            text:text
        }

        $.ajax({
            url: location.origin+"/chat_block.php",
            //dataType: "json", ////Тип данных
            type: "POST",
            async: false,
            data: data,
            success: function(html) {
                if(!html || html == 'null') AjaxChat ();
                if (jQuery.html != "") {
                    var b_chat = $('.chat-customer').html();
                    var chat   = 'Вы: ';
                    var obj = $.parseJSON(html);
                    chat += '<span>';
                    chat += obj['text'];
                    chat += '</span>';
                    chat += '<br /><br />';
                    $('.chat-customer').html(b_chat + chat);
                    $('#btn-input-text , #btn-input-email').val("");
                }
            },
            error: function() {
                //cosole.log('No result');
            }
        });
        $('#btn-input-email').remove();
    }
}
于 2015-03-28T10:22:43.380 回答