如何在commnet中验证电子邮件地址和网站

时间:2019-04-30 10:38:38

标签: php regex preg-match

我想在评论框中验证电子邮件地址和网站。当有人在评论框中写评论时,提交后检查在评论中找到的电子邮件地址或网站是否删除了该电子邮件和地址。

我在电子邮件的正则表达式下面放置了

"/(?:[a-z0-9!#$%&'*+=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+=?^_`{|}~-]+)*|\"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/"

上面的表达式可以验证电子邮件地址,但我想像 email [at] email [dot] com,email {at} email {dot} com,email(at)email(dot)com < / em>

与我在下面的表达式中使用的网站验证相同

"/((((http|https|ftp|ftps)\:\/\/)|www\.)[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,4}(\/\S*)?)/"

但是我想验证 website [dot] com,www [dot] website [dot] com

这样的网站

1 个答案:

答案 0 :(得分:1)

基本上,您需要做的是,在电子邮件中验证@.字符或在weburl中验证.时,您需要增强正则表达式并放置替代项预期为@个字符。所以,

@ should be written as (?:@|[[({]at[\]})])

然后

\. should be written as (?:\.|[[{(]dot[\]})])

无论您将它们放在正则表达式中的什么位置,它也会过滤那些字符串。

这是电子邮件的修改后的正则表达式。

(?:[a-z0-9!#$%&'*+=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+=?^_`{|}~-]+)*|\"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*\")(?:@|[[({]at[\]})])(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\.|[[{(]dot[\]})]))+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

Regex Demo for email

您可以通过相同的方式从网站正则表达式中替换.,然后您修改后的正则表达式就变成了这个

(?:(?:(?:http|https|ftp|ftps)\:\/\/)|www(?:\.|[[{(]dot[\]})]))(?:[a-zA-Z0-9.-]|[[{(]dot[\]})])+(?:\.|[[{(]dot[\]})])[a-zA-Z]{2,4}(\/\S*)?

Regex Demo for web url

现在,除了匹配[dot]{dot}(dot)之外,正则表达式还将匹配[dot}和类似的字符串,并且当您尝试进一步检测此类字符串时,因此匹配除非上下文另有说明,否则这些字符串将是一个额外的优势,而不是一个问题。