这是一个新手问题。
我们说我有一系列非法字符,即:
$special_chars = array("?", "[", "]", "/", "\\", "=", "<", ">", ":", ";", ",", "'", "\"", "&", "$", "#", "*", "(", ")", "|", "~", "`", "!", "{", "}");
我需要检查字符串中是否存在这些字符,即
$my_string = "abcde!fgh"
我已经搜索了一个解决方案,以简单的方式做到这一点,但没有找到任何满意的答案。
对此的任何帮助都将非常感激。
答案 0 :(得分:4)
使用两种数据结构的简洁方法是:
count( array_intersect( str_split($my_string), $special_chars ) )
这也会告诉你字符串中有多少特殊字符。
您可以为您的角色列表编写一个循环,并使用strpos
手动探测。
最少的努力就是将您的特殊字符列表转换为正则表达式charclass并对字符串进行测试。
答案 1 :(得分:0)
如果您只是尝试匹配所有非单词字符,preg_match_all可能是更好的解决方案。试一试。
preg_match_all('/[\W]{1}/',$my_string, $matches);
现在变量$ matches是一个包含所有非单词字符的数组。 如果你想知道你能做多少
$numSpecialCharacters = preg_match_all('/[\W]{1}/',$my_string);
如果你不在乎多少,只想检查它是否包含一个,你可以使用条件
if($numSpecialCharacters === false)
//something went wrong.
elseif( $numSpecialCharacters > 0)
//the string contains special characters
你可以找到文件here。希望有所帮助。