使用javascript匹配字符串中任意长度字符的正则表达式?
Posted
技术标签:
【中文标题】使用javascript匹配字符串中任意长度字符的正则表达式?【英文标题】:Regular expression to match an arbitrary length of characters in a string using javascript? 【发布时间】:2011-12-22 17:33:30 【问题描述】:我只是在学习使用 javascript 进行正则表达式匹配,对下面描述的场景有疑问。
我正在尝试验证电子邮件,条件如下:
格式应该是
xxx@yyy.zzz
where A) “xxx”、“yyy”和“zzz”部分 只能取小写 a 和 z 之间的值 B)zzz的长度, yyy 和 xxx 部分是任意的(但应该至少是一个)
现在我知道我可以像这样构建正则表达式:
编辑:
更正 REG EXP
/[a-z]+@[a-z]+\.[a-z]+/
上面会评估像“aaa@aaa.aaa”这样的字符串为真。
但我担心的是,在上面的表达式中,如果我提供"a999@aaa.aaa"
,它会再次评估为真。现在,如果我将 reg ex 修改为 **/[a-z]1,@[a-z]+\.[a-z]+/**
即使这样,它也会将 "a999@aaa.aaa"
评估为真,因为“a”作为第一个字符存在。
所以,我想知道如何匹配电子邮件"xxx@yyy.zzz"
中的第一部分“xxx”,以便它检查从第一个字符到到达@ 符号的整个字符串,条件是它应该采用只有 a 到 z 作为有效值。
换句话说,正则表达式不应该介意电子邮件的用户名部分的长度,并且无论输入的字符数如何,它都应该根据指定的正则表达式条件对其进行测试,并且应该针对一组从索引 1 到 @ 的索引的字符。
【问题讨论】:
为什么你认为“a999@aaa.aaa”会被评估为真的?/[a-z]+@[a-z]+\.[a-z]+/.test("a999@foo.com") === false
(@符号后面的邮件地址部分缺少+
)
我在输入问题时错过了 + 号。已编辑原始问题。
【参考方案1】:
您的正则表达式不会将a999@aaa.aaa
显示为匹配项。但是,它将显示 9999a@aaa.aaa9999
是匹配项。您缺少的正则表达式标记是 ^
用于字符串的开头和 $
用于字符串的结尾。这就是您要查找的内容:
/^[a-z]1,@[a-z]+\.[a-z]+$/
您可以在此在线验证器上测试此表达式:http://tools.netshiftmedia.com/regexlibrary/#
【讨论】:
砰!实际上,我确实使用了 ^,但从不费心在表达式末尾添加 $。 $东西对我来说是一个新东西。谢谢,这个表达有效。【参考方案2】:/[a-z]+@[a-z]\.[a-z]+/
不会匹配“aaa@aaa.aaa”,但会匹配“aaa@a.aaa”。您只允许在 @ 和 . 之间使用 单个 小写字母。
同样,字符串“a999@aaa.aaa”将不匹配。 [a-z]+ 表示在 a 和 z 之间查找一个或多个字符...不包括数字,因此不会匹配 999。
做正则表达式
/[a-z]+@[a-z]+/.[a-z]+/
做你想做的事?
【讨论】:
"/[az]+@[az]+/.[az]+/" 也是我的意思,不知何故在输入问题时我错过了@[ az]。现在,我最初的问题 - 如何将任意长度的字符串与模式匹配?由于 [a-z]+ 将匹配 "one" 或更多,因此给出 "a999"@ 也将返回 true,因为 a 已匹配模式,对吗?我正在寻找的是某种模式匹配,它从“a99999@xyz.com”中的最后一个 9 到字符串的整个长度...以上是关于使用javascript匹配字符串中任意长度字符的正则表达式?的主要内容,如果未能解决你的问题,请参考以下文章