我需要检查变量是否包含0-9以外的任何内容以及" - "和" +"角色和" "(空间)
我写的preg_match不起作用。任何帮助将不胜感激。
<?php
$var="+91 9766554433";
if(preg_match('/[0-9 +\-]/i', $var))
echo $var;
?>
答案 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
}