[英]regex for email validation: where is the error?
这听起来很奇怪,但是我已经使用该功能已有一段时间了,并且“突然之间,从一天到另一天”,它不再以正确的方式过滤某些地址。 但是,我不明白为什么...
function validate_email($email)
{
/*
(Name) Letters, Numbers, Dots, Hyphens and Underscores
(@ sign)
(Domain) (with possible subdomain(s) ).
Contains only letters, numbers, dots and hyphens (up to 255 characters)
(. sign)
(Extension) Letters only (up to 10 (can be increased in the future) characters)
*/
$regex = '/([a-z0-9_.-]+)'. # name
'@'. # at
'([a-z0-9.-]+){2,255}'. # domain & possibly subdomains
'.'. # period
'([a-z]+){2,10}/i'; # domain extension
if($email == '') {
return false;
}
else {
$eregi = preg_replace($regex, '', $email);
}
return empty($eregi) ? true : false;
}
例如,“ some @ gmail”将显示为正确,以此类推,TLD似乎已发生某事-有人能告诉我为什么吗?
提前非常感谢您!
您对“句点”的评论:
'.'. # period
实际上是任何字符的占位符。 应该是\\.
代替。
但是,您使事情变得过于复杂。 应该存在这样的验证,以拒绝空字段或明显错误的内容(例如,电子邮件字段中输入的名称)。 因此,以我的经验来看,最好的检查就是查看它是否包含@
并且不必过于担心正确的结构。 实际上,您可以编写一个正则表达式,它将忠实地验证任何有效的电子邮件地址并拒绝任何无效的电子邮件地址。 这是一个跨越文本屏幕的怪物。 不要那样做 吻。
我认为错误在这一行:
'.'. # period
您的意思是这里的字面量。 但是句点在正则表达式中有特殊含义(它们表示“任何字符”)。
您需要使用反斜杠将其转义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.