我在Javascript中有相同的表达式,但在PHP中无法用于服务器端验证。这是代码
if (ereg('/^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_.-])+\\.([a-zA-Z])+([a-zA-Z])+/',$_POST['email-address']))
echo "valid email";
else
echo "invalid email";
答案 0 :(得分:9)
过滤器:
if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "E-mail is not valid";
} else {
echo "E-mail is valid";
}
答案 1 :(得分:7)
Don't use regular expressions to "validate" email addresses
编辑:链接已损坏。 This is probably the right link
答案 2 :(得分:4)
使用preg_match,而不是ereg。 ereg正则表达式字符串不使用带有斜杠的字符。
在PHP中的单引号字符串中也可能不需要双反斜杠(但不确定)
答案 3 :(得分:3)
我使用以下内容。在比较它之前,我还会在输入字符串上运行TRIM():
function is_email($string) {
if (preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/',$string)) {
return true;
} else {
return false;
}
}
答案 4 :(得分:2)
我现在整理了来自Cal Henderson,Dave Child,Phil Haack,Doug Lovell和RFC 3696的测试用例。总共有158个测试地址。
我针对我能找到的所有验证器运行了所有这些测试。比较如下:http://www.dominicsayers.com/isemail
我会尝试让这个页面保持最新状态,因为人们会增强验证器。感谢Cal,Dave和Phil在编写这些测试和my own validator的建设性批评方面提供的帮助和合作。
人们应该特别注意errata against RFC 3696。其中三个规范示例实际上是无效地址。并且地址的最大长度为254或256个字符,不 320。
答案 5 :(得分:-1)
可能是因为你用来连接表达式(+)的符号。
无论如何你应该尝试这个:
\ W +([ - +'] \ W +)的 @ \ W +([ - ] \ W +) \ W +([ - ] \ W +)。*