我有一个用于通过PHP发送电子邮件的表单。 现在我有一个用户说电子邮件没有通过。我检查过,似乎只有一个名字保存在电子邮件地址的字段中,而不是电子邮件地址。
所以我通过regex添加了客户端验证,只允许您发送电子邮件的格式为[text] @ [text]。[text] - 验证电子邮件地址的常用做法。
使用的正则表达式:
var regex = /\S+@\S+\.\S+/;
猜猜是什么?问题仍然存在:用户可以发送电子邮件,地址通过验证,但只保存名称!
但是怎么样?
用户已从Outlook复制了电子邮件地址,其格式如下:
Mustermann, Max <Max.Mustermann@gmail.com>
正则表达式验证说:这是一个有效的电子邮件地址。
起初我以为我必须改变我的正则表达式,不允许这样做。但是我的一位同事说这是电子邮件地址的有效格式。
所以我开始研究PHP实际上对该字符串做了什么。在这里变得奇怪:
$email = "Mustermann, Max <Max.Mustermann@gmail.com>";
var_dump($email);
// prints out:
// string(42) "Mustermann, Max "
字符串在<
处停止,但其长度仍为42.这里到底发生了什么?
修改
故事结束:我正在使用更严格的正则表达式来验证现在的电子邮件地址,即HTML5 input type="email" from W3C使用的相同内容:
/^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/
答案 0 :(得分:2)
PHP没有削减任何东西。但<
和>
被解释为HTML标记,因此您的浏览器会将其省略。
只需查看页面源代码,您就会找到丢失的字符。
要在HTML中查看整个文本,您必须逃避它:
echo htmlentities($email);