Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP正则表达式检查是否包含一个或多个指定字符_Php_Regex - Fatal编程技术网

PHP正则表达式检查是否包含一个或多个指定字符

PHP正则表达式检查是否包含一个或多个指定字符,php,regex,Php,Regex,我正在尝试检查我的字符串是否包含以下字符之一:!@$&*但是,每当我运行测试时,它总是返回false。我对正则表达式不是很精通,我已经看过很多例子,它们似乎都指出这是正确的,但我想这不是因为它失败了。有人能告诉我正确的支票是什么吗 if(!preg_match("#[!@#$&*]+#", $value)){ return "Character not found"; } else{ return "Character found!"; } 测试字符串是JohnDoe1

我正在尝试检查我的字符串是否包含以下字符之一:!@$&*但是,每当我运行测试时,它总是返回false。我对正则表达式不是很精通,我已经看过很多例子,它们似乎都指出这是正确的,但我想这不是因为它失败了。有人能告诉我正确的支票是什么吗

if(!preg_match("#[!@#$&*]+#", $value)){
    return "Character not found";
}
else{
    return "Character found!";
}
测试字符串是JohnDoe1@

替换
“#[!$&*]+\”
“#[!@\$&*]+\”

您的#分隔符冲突,作为辅助分隔符,$可能会被解析为变量,因为您有双引号


其他选项包括单引号和不同的delimter
'/[!@#$&*]+/'

它失败了,因为在正则表达式中使用分隔符时没有
逃离它

请尝试其他分隔符

"~[!@#$&*]+~" 
或者跳过分隔符

"#[!@\#$&*]+#"

您需要转义分隔符。它返回false,因为
JohnDoe1
是一个单词,因此如果需要它处理字母数字字符,请将其修改为
/\w+[!@$&*]+/
,您也不需要量词
[!@$&*]
将是这些字符中的任意一个。