如何使用 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.ninjatest123@email.infotest123@email.traveltest123@email.history。它们都是有效的电子邮件地址... 我知道,我现在正在写一个新的。虽然我认为我现在会坚持使用 type="email"。唯一不好的是用户可以在浏览器的开发工具中编辑类型,并且(我认为)使用无效的电子邮件地址。 是的,这可能会发生,而且没那么难,用 google 搜索两分钟。但是请考虑一个事实,就像许多其他人已经告诉您的那样,您将阻止许多有效的电子邮件地址(使用此正则表达式),因此最好不要使用它,而不是使用它。剩下的就交给你了! 我不明白为什么人们不赞成我的答案,我根据 aCodingN00b 的问题提供了一个有效的答案...【参考方案2】:

preg_match 会做你需要的。

if(preg_match($regex,$email))
    echo "Email matches regex!";

【讨论】:

而且... 4 分钟前发布的答案已被接受,而不是 16 分钟前发布的这个答案。因为这是有道理的。 Umm Manos 的回答更清楚,而且有一个更好的例子。这个答案同样好。我无法将两者都标记为已回答。

以上是关于如何使用 PHP 和正则表达式检查输入值是不是正确? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式检测语法正确的 URL [重复]

检查文件在php中是不是存在正则表达式[重复]

验证邮箱格式是不是正确

如何使用正则表达式验证范围 1-99?

如何用正则表达式判断时间输入是不是正确?格式为00:00,小时是00-23,分钟是00-60,秒钟00-60

js 判断一个值是不是为数字