【问题标题】:PHP regex phone validation not workingPHP正则表达式电话验证不起作用
【发布时间】:2017-02-26 09:27:26
【问题描述】:

我的 PHP 验证正则表达式不起作用,我不明白为什么。我的代码返回:'失败'。 我检查了我的正则表达式模式,它是有效的:https://regex101.com/r/2Is2L5/2

电话号码是:+7 (555) 555–55–55

if(preg_match('/^\+?\d{1,3}\s*\(\d{3}\)\s*\d{3}[-–•\s]?\d{2}[-–•\s]?\d{2}$/', $_GET['userPhone'])) {
    echo 'Success';
}
else{
    echo 'Failure';
}

请帮忙!

【问题讨论】:

  • 这个字符是什么()?
  • 显示var_dump($_GET['userPhone']);
  • var_dump 是:string(22) "+7 (555) 555–55–55"

标签: php regex


【解决方案1】:

以下对我有用:

$ cat a.php
<?php
if(preg_match('/^\+?\d{1,3}\s*\(\d{3}\)\s*\d{3}[-–•\s]?\d{2}[-–•\s]?\d{2}$/u', '+7 (555) 555–55–55')) {
    echo 'Success';
}
else{
    echo 'Failure';
}
?>

$ php a.php
Success

注意末尾的/u 修饰符。根据documentation

u (PCRE_UTF8) 此修饰符打开 PCRE 的附加功能 这与 Perl 不兼容。模式和主题字符串是 视为 UTF-8。无效的主题将导致 preg_* 函数 什么都不匹配;无效的模式将触发级别错误 E_WARNING。五个和六个八位字节的 UTF-8 序列被视为无效 自 PHP 5.3.4 (resp. PCRE 7.3 2007-08-28) 起;以前那些是 视为有效的 UTF-8。

【讨论】:

  • 嘿,谢谢!我只是在最后加上“u”修饰符,终于成功了!
猜你喜欢
  • 1970-01-01
  • 2012-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-03
  • 2018-02-03
  • 1970-01-01
相关资源
最近更新 更多