Regex 用于电子邮件验证的正则表达式
我编写了下面的正则表达式,用于一个非常简单的电子邮件验证。我计划发送一个确认链接Regex 用于电子邮件验证的正则表达式,regex,email,Regex,Email,我编写了下面的正则表达式,用于一个非常简单的电子邮件验证。我计划发送一个确认链接 /.*@[a-z0-9.-]*/i 但是,我希望从当前状态对其进行增强,因为这样的字符串不会产生期望的结果: 测试,我的名字+test@gmail-something.co.uk,test “测试”部分被不希望地包括在比赛中。我尝试了单词边界,但没有成功 我应该如何修改 尽管我一直保持这种简单,但是否有任何有效的电子邮件格式会被排除在外 谢谢 不要使用正则表达式验证电子邮件地址 取而代之的是本·芬尼的《第一集》
/.*@[a-z0-9.-]*/i
但是,我希望从当前状态对其进行增强,因为这样的字符串不会产生期望的结果:
测试,我的名字+test@gmail-something.co.uk,test
“测试”部分被不希望地包括在比赛中。我尝试了单词边界,但没有成功
谢谢 不要使用正则表达式验证电子邮件地址 取而代之的是本·芬尼的《第一集》 当人们问“我如何验证 “电子邮件地址有效吗?”是“尝试向其发送邮件” 这既是一种肾盂疗法,也是最好的方法。如果你真的想 确认,不要试图静态验证;使用电子邮件地址, 并检查结果。向那个地址发送电子邮件,不要使用它 除非你得到回答“是的,这是正确的” 收件人提供的“要使用的地址” 发送系统的邮件传输代理,而不是正则表达式, 确定要将邮件发送到的域的部分 域名系统,而不是正则表达式,决定了什么 域是有效的,并且哪个主机应该接收该域的邮件 尤其是接收邮件系统,而不是正则表达式, 确定哪些本地部件是有效的 1这是一个更复杂的问题!!!
看到并害怕…非常害怕。一个较小的两步正则表达式提供了很好的结果 /**检查电子邮件地址的格式是否有效。 *邮箱的前导字符必须是alpha
*剩余字符字母数字加-u和点
*域基必须至少为2个字符
*域扩展必须至少为2,不超过4 alpha
*子域是允许的。 *@version 050208添加了撇号作为有效字符 *@version 04/25/07单封电子邮件地址和单封
*允许使用字母域名。 */ 公共静态布尔值isValidEmailAddress(字符串地址){ 字符串sRegExp
// 050208 using the literal that was actually in place
// 050719 tweaked
// 050907 tweaked, for spaces next to @ sign, two letter email left of @ ok
// 042507 changed to allow single letter email addresses and single letter domain names
// 080612 added trap and unit test for two adjacent @signs
sRegExp = "[a-z0-9#$%&]" // don't lead with dot
+ "[a-z0-9#$%&'\\.\\-_]*" // more stuff dots OK
+ "@[^\\.\\s@]" // no dots or space or another @ sign next to @ sign
+ "[a-z0-9_\\.\\-_]*" // may or may not have more character
+ "\\.[a-z]{2,4}"; // ending with top level domain: com,. biz, .de, etc.
boolean bTestOne = java.util.regex.Pattern.compile( sRegExp,
java.util.regex.Pattern.CASE_INSENSITIVE).matcher(address).matches();
// should this work ?
boolean bTwoDots = java.util.regex.Pattern.compile("\\.\\.", // no adjacent dots
java.util.regex.Pattern.CASE_INSENSITIVE).matcher(address).find();
boolean bDotBefore = java.util.regex.Pattern.compile("[\\.\\s]@", //no dots or spaces before @
java.util.regex.Pattern.CASE_INSENSITIVE).matcher(address).find();
return bTestOne && !bTwoDots && !bDotBefore;
} // end IsValidEmail
这来自Regex Buddy(绝对需要购买prog!)
你使用的几乎没有一个短到足以说明问题的东西能够真正验证电子邮件地址。话虽如此,我通常使用的是:
^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
它实际上是ASP.NET的电子邮件地址正则表达式验证程序的内置正则表达式
注意:本线程中给出的许多正则表达式可能在90年代就已经运行,但在今天的web环境中,TLD允许小于2个字符,大于4个字符,info@about.museum是有效的电子邮件地址,因为。museum是新的长TLD之一。而不是。请尝试匹配除\s之外的所有字符(空白):
我发现,与其将整个电子邮件地址与正则表达式进行匹配,不如在@和处拆分字符串:
- 首先通过DNS库检查域部件的现有MX或A记录
- 然后对照更简单的正则表达式检查localpart(@左侧的部分)
- 使用一个强大的DNS解析器库,不要使用自己的。对大公司进行测试。这些公司有时有大量的邮件服务器,这可能会导致问题。我在bmw.com上看到一个有缺陷的库。我只是说::)
\S
?除非它不适用于所有正则表达式引擎。方括号前面的“^”表示不在此列表中的字符。因此,它颠倒了f\S的含义。我想您可以使用“/\S*@[a-z0-9.-]*/I”代替。
^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
/[^\s]*@[a-z0-9.-]*/i