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


PHP preg_match to allow only numbers,spaces '+' and '-'

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

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

<?php
$var="+91 9766554433";
if(preg_match('/[0-9 +'-]/i', $var))
 echo $var;
?>

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

这应该可以完成工作。

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

只需否定字符类:

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

或者添加锚点和量词:

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

在您的案例中,不区分大小写的修饰符不是强制性的。

您可以尝试regex101.com来测试您的regex以符合您的标准,然后在左侧面板上,您会发现代码生成器,它将生成PHP、Python和Javascript的代码。

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

你可以看看这里。

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

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