使用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匹配字符串中任意长度字符的正则表达式?的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript——正则总结

javascript中使用正则表达式

like的模糊匹配

Sql Server中通配符

正则表达式之元字符

javascript计数匹配字符串长度