如何使用 PHP 和正则表达式检查输入值是不是正确? [复制]
Posted
技术标签:
【中文标题】如何使用 PHP 和正则表达式检查输入值是不是正确? [复制]【英文标题】:How to check if an input value is correct using PHP and regular expressions? [duplicate]如何使用 PHP 和正则表达式检查输入值是否正确? [复制] 【发布时间】:2015-11-02 08:28:50 【问题描述】:基本上我的网站上有一个小表单,当我提交它时,我希望 php 检查电子邮件输入 <input type="text" name="destinationMail">
是否匹配正确的电子邮件正则表达式模式,即:[a-Z0-9.]+[@][a-Z]+[.][a-Z]3
我知道 PHP 中有一些函数可以检查电子邮件是否正确(我认为),但我想为此使用正则表达式。
谢谢。
【问题讨论】:
请注意,有许多有效的电子邮件地址将无法通过您的验证,即foo+bar@example.com
或 'foo@example.info`。
该正则表达式将阻止许多有效的电子邮件地址:包括国际化***域的电子邮件地址。
不要忘记可以有更多字母的域,例如info@me.ninja
。而且,我不确定,但不应该是[A-z]
而不是[a-Z]
吗?
如果你知道它有一个功能。为什么要创建一个可以排除有效电子邮件地址的正则表达式?
使用它,但还不够。总是仔细检查!如果可以检查 PHP,请再次检查,因为前端很容易被欺骗。 (PHP 也可能被欺骗,但它不再那么容易了!)而且,并非所有浏览器都支持它。其他浏览器会将其视为type="text"
【参考方案1】:
根据您的正则表达式:
$email = "test123@email.com";
$regex = "^[A-z0-9.]+@[A-z]+\.[A-z]3+$^";
if (preg_match($regex, $email))
echo $email . " = valid.";
else
echo $email . " = invalid";
虽然我建议php filter_var 这比你的正则表达式更安全更好。
【讨论】:
谢谢。正是我想要的。另外,请注意我的正则表达式模式不正确,因为它不会接受大多数有效的电子邮件地址。 尝试一下:test123@email.ninja
、test123@email.info
、test123@email.travel
和test123@email.history
。它们都是有效的电子邮件地址...
我知道,我现在正在写一个新的。虽然我认为我现在会坚持使用 type="email"。唯一不好的是用户可以在浏览器的开发工具中编辑类型,并且(我认为)使用无效的电子邮件地址。
是的,这可能会发生,而且没那么难,用 google 搜索两分钟。但是请考虑一个事实,就像许多其他人已经告诉您的那样,您将阻止许多有效的电子邮件地址(使用此正则表达式),因此最好不要使用它,而不是使用它。剩下的就交给你了!
我不明白为什么人们不赞成我的答案,我根据 aCodingN00b 的问题提供了一个有效的答案...【参考方案2】:
preg_match
会做你需要的。
if(preg_match($regex,$email))
echo "Email matches regex!";
【讨论】:
而且... 4 分钟前发布的答案已被接受,而不是 16 分钟前发布的这个答案。因为这是有道理的。 Umm Manos 的回答更清楚,而且有一个更好的例子。这个答案同样好。我无法将两者都标记为已回答。以上是关于如何使用 PHP 和正则表达式检查输入值是不是正确? [复制]的主要内容,如果未能解决你的问题,请参考以下文章