PHP:检查字符串中是否存在列表中的特殊字符

时间:2014-03-13 03:07:27

标签: php arrays string character

这是一个新手问题。

我们说我有一系列非法字符,即:

$special_chars = array("?", "[", "]", "/", "\\", "=", "<", ">", ":", ";", ",", "'", "\"", "&", "$", "#", "*", "(", ")", "|", "~", "`", "!", "{", "}");

我需要检查字符串中是否存在这些字符,即

$my_string = "abcde!fgh"

我已经搜索了一个解决方案,以简单的方式做到这一点,但没有找到任何满意的答案。

对此的任何帮助都将非常感激。

2 个答案:

答案 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);
\ W匹配任何非单词字符和指定的{1}只抓取其中的1个并退出,使用preg_match_all而不是preg_match获取与正则表达式匹配的所有部分而不仅仅是第一个部分。

现在变量$ matches是一个包含所有非单词字符的数组。 如果你想知道你能做多少

$numSpecialCharacters = preg_match_all('/[\W]{1}/',$my_string);

如果你不在乎多少,只想检查它是否包含一个,你可以使用条件

if($numSpecialCharacters === false)
    //something went wrong.
elseif( $numSpecialCharacters > 0)
    //the string contains special characters

你可以找到文件here。希望有所帮助。