这个正则表达式代码意味着什么

时间:2014-03-29 07:49:49

标签: javascript regex

我的项目中有一个正则表达式,我试图理解它的意思,所以如果有人可以帮助我

/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/

/^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$/

首先我知道第一个,但是(。[_ a-z0-9 - ] +)*这是做什么以及做什么(。[a-z0-9 - ] +)*(。 [AZ] {2,4})$

,第二,这是什么?=正在这个表达式

$("#mailId").change(function(){
                    var m=$("#mailId").val();
                    var mailRegex=/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/; 
                    if(m=="")
                    $("#errMail").html("MailId can't be empty.");
                    else if(m.match(mailRegex))
                    $("#errMail").html("");
                    else
                        $("#errMail").html("MailId is not valid.");
                });

4 个答案:

答案 0 :(得分:3)

第一个似乎是针对特定形式的地址的电子邮件验证:

(name).(name).(name) ... @ (name).(name).(name) ... .(domain)

其中name是a .. z的序列,数字或字符-和域名是2到4个字母的序列。具体如下:

  • ^ =字符串开头
  • [_a-z0-9-]+ =下划线,小写,数字或破折号中的一个或多个
  • \. =一个点
  • [_a-z0-9-]+ =下划线,小写,数字或破折号中的一个或多个
  • * =部分dot+name可以出现零次或多次
  • @ = @符号
  • [a-z0-9-]+ =其他名称
  • (\.[a-z0-9-]+)* =零或多个dot+name
  • 的anoter序列
  • \. =一个点
  • [a-z]{2,4} = 2到4个字母
  • $ =字符串结尾

第二个似乎是一个错误的密码验证,要求一系列字母和数字至少包含一个字母和至少一个数字。

(?= ... )形式称为“零宽度前瞻断言”,这意味着包含的表达式必须验证但不“使用”字符:

  • ^ =字符串开头
  • (?=.*[0-9]) =任何字符序列和数字(只是向前看)
  • (?=.*[a-zA-Z]) =任何字符序列和字母字符(只是看)
  • ([a-zA-Z0-9]+) =数字和字母中的一个或多个字符
  • $ =字符串结尾

前两个前瞻断言用于检查表达式中是否至少有一个数字和至少一个字母,必须由字母和数字组成。

答案 1 :(得分:2)

(\.[_a-z0-9-]+)*与群组\.[_a-z0-9-]+匹配0次或更多次。我认为很容易理解这匹配的内容:一个点,后跟字母数字字符,短划线-或任何顺序的下划线,至少有一个。

( ... )用于对这些字符进行分组。 *表示重复0次或更多次。

(\.[a-z0-9-]+)*与上述类似,但此处不允许使用下划线。

(\.[a-z]{2,4})$将匹配一个点,然后是2到4个字母,并确保之后没有其他字符。


正则表达式中的

(?= ... )被称为积极前瞻。这意味着正则表达式只有在满足内部正则表达式时才会匹配。

例如:

^检查字符串的开头。

(?=.*[0-9])将确保该字符串至少有1位数字。 .*[0-9]仅在数字匹配时匹配。

(?=.*[a-zA-Z])将确保该字符串至少包含1个字母。 .*[a-zA-Z]仅在匹配字母时匹配。

在这里使用前瞻而不是直接使用字符类[a-zA-Z0-9]+的好处是,它可用于检查整个字符串而无需移动'。

当检查字符串的字符串时,检查的位置仍保留在字符串的开头,并且在检查字母时仍然保留在开头。

这反过来允许正则表达式确保数字和字母都存在,[a-zA-Z0-9]+单独不能做的事情,因为它匹配Aaa(无数字)和123(否)信件)就好了。使用前瞻确保匹配中有数字和字母。


请注意,并非所有电子邮件地址都可以使用此正则表达式进行正确验证。存在许多有效的电子邮件地址格式,正则表达式将其视为无效。请参阅this question

答案 2 :(得分:1)

使用regexper等工具

  • 所以第一个是email regexp

  • 第二,因为@Jerry说是password,这意味着它必须是带字母和数字的字母数字字符串

答案 3 :(得分:0)

这个问题说第一个尝试使用正则表达式检查电子邮件,似乎可以查看:Using a regular expression to validate an email address

似乎第二个是密码检查程序。

This是有关javascript正则表达式信息的良好来源。 ?=是一个先行:

  

匹配' x'只有当' x'之后是' y。这被称为a   超前。

     

例如,/ Jack(?= Sprat)/匹配' Jack'只有它后面跟着   '鲱&#39 ;. /杰克(?=斯普拉特|弗罗斯特)/匹配'杰克'只有遵循它   by' Sprat'或者'弗罗斯特'但是,没有' Sprat'也不是'弗罗斯特'是其一部分   比赛结果。

我还建议您使用regexpal,您可以使用{{3}}快速测试哪些模式与您的正则表达式相匹配。