只允许使用英文字符/字母/数字和一些特殊字符

时间:2013-05-02 07:23:52

标签: php string filter

我的问题是我正在从头开始制作一个小型搜索引擎,但如果我用俄语/除英语之外的任何其他语言搜索,它就会搞砸了。我希望有人可以给我一个带正则表达式的代码,可以过滤掉(不只是检测,自动过滤掉)俄文字母,或除英文字母以外的任何其他字母,以及键盘特殊字符( - /:;()$& ; @“。 - 等等。 稍后,我将为我的引擎实现不同的语言支持,但是现在,我想完成引擎的基础。

提前致谢。

3 个答案:

答案 0 :(得分:5)

您可以创建一个允许的字符数组,然后过滤那些不允许的字符:

$allowed = array_merge(range('a', 'z'), range('A', 'Z'), range(0, 9), array(' ', '+', '/', '-', '*', '.')); // Create an array of allowed characters

$string = 'This is allowed and this not é Ó ½ and nothing 123.'; // test string

$array = str_split($string); // split the string (character length = 1)

echo implode('', array_intersect($array, $allowed)); // Filter and implode !

Online demo

答案 1 :(得分:0)

为何复杂化?正则表达式会读取字符串的内容,所以最好自己动手。读取字符串的字符并检查其对应的ASCII值。

使用SplStorageObject创建类似于结构的哈希集,并手动检查字符是否属于所需的集合。您可以将要读取的任何字符添加到此集合中。

编辑 - 您可能也想使用正则表达式 - 类似于[a-zA-Z0-9,。/ +& - ],但使用集合可以允许您通过添加更多字符来逐渐扩展搜索引擎已知字符集。

答案 2 :(得分:0)

这可能不是最有效的方式,但它有效:)

$str='"it is a  simple test \ + - é Ó ½ 213  /:;()$&@".~" ';
$result= preg_replace('/[^\s\w\+\-\\":;@\(\)\$\&\.\/]*/', '', $str);
echo $result;

但您需要添加每个特殊字符。