PHP preg_match只允许数字,空格' +'和' - '

时间:2016-05-08 09:22:20

标签: php regex string validation preg-match

我需要检查变量是否包含0-9以外的任何内容以及" - "和" +"角色和" "(空间)

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

<?php

$var="+91 9766554433";

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

4 个答案:

答案 0 :(得分:3)

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

这应该做的工作。

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

答案 1 :(得分:2)

只是否定角色类:

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

或添加锚点和量词:

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

在您的情况下,不区分大小写的修饰符不是必需的。

答案 2 :(得分:1)

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

$re = "/^[\\d\\s\\+\\-]+$/i"; 
$str = "+91 9766554433"; 

preg_match($re, $str, $matches);

你可以看看here

答案 3 :(得分:0)

尝试查看是否有效。我还没有预先测试过它,所以如果它不起作用我会道歉。

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