2013-05-02 113 views
1

我的问题是我从头开始创建一个小型搜索引擎,但如果我用俄语/除英语之外的其他语言搜索,它会变得混乱。我希望有人能给我一个带正则表达式的代码,可以过滤掉(不仅仅是检测,自动过滤)俄文字母,或除英文字母和键盘特殊字符( -/:;()外的其他任何字母$ & @” - 。等) 后来,我将提前实现不同语言的支持,我的引擎,但现在,我要完成发动机的基础只允许英文字母/数字/数字和一些特殊字符

感谢

+0

但正则表达式是专为像你的情况,为什么你不想使用它? – Darvex 2013-05-02 07:26:09

+0

如果没有替代正则表达式,我想它会没事的。我只是无法学习正则表达式,这对我来说似乎太复杂了。 – VladHQ 2013-05-02 07:27:30

+1

@TillHelge答案有一个正则表达式的解决方案。 – HamZa 2013-05-02 07:32:07

回答

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

这看起来很有趣。非常感谢,我会尝试一下! – VladHQ 2013-05-02 12:28:00

0

为什么复杂?正则表达式将读取字符串的内容,所以最好自己做。读取字符串的字符并检查其对应的ASCII值。

使用SplStorageObject创建一个类似于结构的哈希集,如果字符落在所需的集合中,则手动检查。你可以添加任何你想要读取的字符到这个集合。

编辑 - 您可能也想使用正则表达式 - 类似[a-zA-Z0-9,。/ + & - ],但使用set可以让您逐渐扩展您的搜索引擎,已知字符集。

0

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

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

,但你需要在每个特殊字符添加。

相关问题