^([a-z0-9_\.-])+@[yahoo]{5}\.([com]{3}\.)?[com]{3}$
目前匹配xxxx@yahoo.com,如何重写此内容以匹配其他一些域?例如,gmail.com和deadforce.com。我试过以下但是没有用,我做错了什么?
^([a-z0-9_\.-])+@[yahoo|gmail|deadforce]{5,9}\.([com]{3}\.)?[com]{3}$
提前谢谢!
答案 0 :(得分:0)
电子邮件验证是一个众所周知的难题,许多人在尝试自己验证时失败得非常可怕。
Filter var有一个仅适用于电子邮件的过滤器。用它来检查电子邮件地址的有效性。见http://php.net/manual/en/function.filter-var.php
if (filter_var('bob@example.com', FILTER_VALIDATE_EMAIL)) {
// Email is valid
}
以简单的方式进行域检查可能没有任何缺点。只需检查电子邮件地址中的域字符串即可。 e.g。
if (
filter_var($email, FILTER_VALIDATE_EMAIL) &&
preg_match("/@(yahoo|gmail|deadforce)\.com/", $email)
) {
// Email is valid
}
就原始正则表达而言,相当多的是不正确的,这就是为什么你在更改它时遇到的麻烦。 regexper显示您已创建的内容。
([a-z0-9_\.-])+ should be [a-z0-9_\.-]+ or ([a-z0-9_\.-]+)
()仅捕获本节中的结果。如果你想要结果,移动括号,如果没有删除它们。
[yahoo]{5} should be yahoo
这是匹配5个字符,它们是y,a,h,o之一,所以它会匹配hayoo等。
\.([com]{3}\.)?[com]{3} should be \.com
Dunno这是试图完成的,但你只想要.com
查看http:// www.regular-expressions.info /tutorial.html获取正则表达式指南
答案 1 :(得分:0)
你的正则表达式并没有说出你的想法。
^([a-z0-9_\.-])+@[yahoo]{5}\.([com]{3}\.)?[com]{3}$
表示任何字符a-z
,0-9
,.
,-
一次或多次。
您尝试匹配yahoo.com
的后续部分不正确。它显示y
,a
,h
或o
,其中任何一个字符都被允许5次。与com
相同,因此aaaaa.ooo
在此处有效。我不确定([com]{3}\.)?[com]{3}
试图说的是什么,但我认为您想检查.com
。
请参阅此处的字符类文档http://www.regular-expressions.info/charclass.html。
你想要的是
^([a-z0-9_.\-])+@yahoo\.com$
或更多域使用分组,
^([a-z0-9_.\-])+@(yahoo|gmail|deadforce)\.com$
您还没有说明您使用的语言,因此无法提供真实的演示。