如何从逗号分隔字符串中筛选仅含白名单字符的内容?
PHP 数组过滤:移除含非标准字符的元素
你可以通过array_filter结合正则表达式精准实现需求,核心是用正则匹配仅包含允许字符的元素,具体代码如下:
// 示例输入数组 $input = ['Adam-Smith', 'Christine', 'Müller', 'Roger', 'Hauptstraße', 'X Æ A-12']; // 定义允许的字符集:大小写字母、数字,以及指定特殊符号 $allowedPattern = '/^[a-zA-Z0-9()""\-+&%@#]+$/'; // 过滤数组,仅保留符合规则的元素 $output = array_filter($input, function($item) use ($allowedPattern) { return preg_match($allowedPattern, $item); }); // 重置数组索引(可选,按需使用) $output = array_values($output); print_r($output);
正则表达式说明:
^和$:强制匹配整个字符串,避免出现"部分合法但存在非法字符"的漏判情况[a-zA-Z0-9]:匹配所有大小写英文字母与数字()""\-+&%@#:匹配你指定的特殊符号,其中\-是转义后的连字符(连字符在正则字符集内有范围定义的特殊作用,必须转义才能表示普通连字符)
运行结果:
执行代码后输出为:
Array ( [0] => Adam-Smith [1] => Christine [2] => Roger )
完全符合你期望的结果,同时不会误删包含"a"的合法元素。
内容的提问来源于stack exchange,提问作者Astw41
相关产品推荐
相关产品推荐

