【问题标题】:PHP preg_match to allow only numbers,spaces '+' and '-'PHP preg_match 只允许数字、空格 '+' 和 '-'
【发布时间】:2016-09-03 01:18:08
【问题描述】:

我需要检查变量是否包含除 0-9 和“-”、“+”字符和“”(空格)以外的任何内容。

我写的 preg_match 不起作用。任何帮助将不胜感激。

<?php

$var="+91 9766554433";

if(preg_match('/[0-9 +\-]/i', $var))
 echo $var;
?>

【问题讨论】:

  • 为什么你认为它不起作用?

标签: php regex string validation preg-match


【解决方案1】:

试试看这是否有效。我没有事先测试它,所以如果它不起作用,我很抱歉。

if(!preg_match('/^[0-9]+.-.+." ".*$/', $var)){
     //variable contains char not allowed 
}else{
 //variable only contains allowed chars
}

【讨论】:

    【解决方案2】:

    您必须将* 作为量词添加到整个字符类,并将anchors 添加到正则表达式的开头和结尾:^$ 表示仅匹配只包含内部的行从行首到行尾的正则表达式。此外,i 修饰符是不必要的,因为在此正则表达式中不需要不区分大小写。

    这应该可以完成工作。

    if(!preg_match('/^[0-9 +-]*$/', $var)){
         //variable contains char not allowed 
    }else{
         //variable only contains allowed chars
    }
    

    【讨论】:

    • 实际上你不必转义+,因为-是组中的最后一个字符,你也不必转义它。
    • 感谢您的提示。我认为它在一个组中,因此不被解释为限定词。
    • 请注意,空字符串也是如此(因为星号)。如果您需要至少 一个 字符,请使用 +
    【解决方案3】:

    只需否定字符类:

    if ( preg_match('/[^0-9 +-]/', $var) )
        echo $var;
    

    或添加锚点和量词:

    if ( preg_match('/^[0-9 +-]+$/', $var) )
        echo $var;
    

    不区分大小写的修饰符在您的情况下不是强制性的。

    【讨论】:

      【解决方案4】:

      您可以尝试regex101.com 来测试您的正则表达式以匹配您的条件,然后在左侧面板上,您会找到代码生成器,它将为 PHP、Python 和 Javascript 生成代码。

      $re = "/^[\\d\\s\\+\\-]+$/i"; 
      $str = "+91 9766554433"; 
      
      preg_match($re, $str, $matches);
      

      你可以看看here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-06
        • 1970-01-01
        • 2013-08-09
        • 2011-10-15
        • 1970-01-01
        • 2017-05-10
        • 1970-01-01
        • 2013-11-04
        相关资源
        最近更新 更多