2013-05-02 243 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; 

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

相關問題