重写正则表达式以接受条件术语

时间:2015-06-17 15:30:47

标签: javascript regex

^([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}$

提前谢谢!

2 个答案:

答案 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-z0-9.-一次或多次。

您尝试匹配yahoo.com的后续部分不正确。它显示yaho,其中任何一个字符都被允许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$

您还没有说明您使用的语言,因此无法提供真实的演示。

功能演示,https://jsfiddle.net/qa9x9hua/1/