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


PHP: Check if special characters from a list are present in a string

这是一个新手问题。

假设我有一个非法字符数组,即:

$special_chars = array("?", "[", "]", "/", "''", "=", "<", ">", ":", ";", ",", "'", "'"", "&", "$", "#", "*", "(", ")", "|", "~", "`", "!", "{", "}");
我需要检查字符串中是否存在这些字符,即
$my_string = "abcde!fgh"

我已经用谷歌搜索了一个简单的方法来解决这个问题,但还没有找到任何令人满意的答案。

对于这两个数据结构,一种简洁的方法是:

count( array_intersect( str_split($my_string), $special_chars ) )

还会告诉您字符串中有多少个特殊字符。

你也可以为你的字符列表写一个循环,然后用strpos手动探测。

最简单的方法是将您的特殊字符列表转换为regex字符类并针对字符串进行测试。

如果您只是试图匹配所有非单词字符,那么preg_match_all可能是更好的解决方案。试试吧。

preg_match_all('/['W]{1}/',$my_string, $matches);

'W匹配任何非单词字符和{1},指定只抓取其中一个并退出,使用preg_match_all而不是preg_match获取匹配regex的所有部分,而不仅仅是第一个部分。

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

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

如果你不关心有多少,只想检查它是否包含一个,你可以使用条件语句

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

你可以在这里找到文档。