我需要检查一个变量是否包含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
}