电子邮件正则表达式 - 排除指定集

时间:2011-08-10 22:14:44

标签: javascript regex email

我今天大约六个小时的大部分时间都在研究正则表达式。对于我的生活,我无法弄清楚。我尝试了一百种不同的方法,但无济于事。非常感谢任何帮助!

基本规则:

1 - 在地址部分(@符号之前)中排除这些字符:"()<>@,;:\[]*&^%$#!{}/"

2 - 地址可以包含“。”,但不能包含两行。

我对第一条规则有一个优雅的解决方案,但是,规则二是杀了我!这是我到目前为止所拥有的。 (我只包括@符号的部分以保持简单)。此外,请务必注意,此正则表达式正在JavaScript中使用,因此不允许使用条件IF。

/^[^()<>@,;:\\[\]*&^%$#!{}//]+$/

3 个答案:

答案 0 :(得分:1)

首先,我建议你总是选择你想要允许的角色而不是相反的角色,你永远不会知道你可能错过哪些危险角色。

其次,这是我经常用于验证电子邮件的正则表达式,它完美无缺。希望它可以帮助你。

/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$/i

答案 1 :(得分:1)

规则2

/^(?:\.?[^.])+\.?$/

表示任意数量的序列(可选点后跟强制非点),末尾带有可选点。

考虑四个两个字符序列

  1. xx匹配为两个非点字符。
  2. .x匹配为可选点,后跟非点。
  3. x.匹配为非点,后跟可选的点。
  4. ..不匹配,因为第一个点后没有非点。
  5. 关于电子邮件地址要记住的一点是,点可以出现在棘手的地方

    "..@"@.example.com
    

    是有效的电子邮件地址。

    "..@"是完全有效的引用本地部分制作,而.example.com只是说example.com的一种方式,但是针对根DNS解析而不是使用主机搜索路径。如果example.com位于主机搜索路径上,则example.com.myintranet.com可能会解析为myintranet.com,但.example.com始终会解析为绝对主机example.com

答案 2 :(得分:1)

首先,根据您的规格:

^(?![\s\S]*\.\.)[^()<>@,;:\\[\]*&^%$#!{}/]@.*$

这只是你的正则表达式,(?!.*\.\.)加在前面。这是一个负向前瞻,如果字符串中的任何地方有任何两个连续的句点,则不匹配。

然而,

正确匹配的电子邮件地址要困难得多。