2011-01-10 67 views
2

有一個簡單的正則表達式,將捕獲所有非英文字符?這將需要允許共同punctation和符號,但沒有特殊字符,如俄語,日語等正則表達式拒絕非英文字符?

尋找的東西在PHP中工作。

+0

你爲什麼想限制英文字符,但允許所有punctuation‽你真的想限制輸入到ASCII字符? – 2011-01-10 21:56:03

+1

可能與http://stackoverflow.com/questions/4619603/php-validate-string-characters-are-uk-or-us-keyboard-characters/4619747 – 2011-01-10 21:57:16

+0

@Anon - 名稱和地址通常包括撇號,逗號,期限等。想要規範化數據,所以一切都是英文的。 – 2011-01-10 22:15:20

回答

0

例如這一個[^ A-ZA-Z0-9 \,\ \ - ]?

2

由於您的評論你提到的地址,他們可能包含數字了。所以:

preg_replace('/[^[:alpha:][:punct:][:digit:]]/u', utf8_encode($input), ''); 

應該替換你不需要的字符。不過,如果您的語言環境設置正確,[:alpha:]類纔會有效。例如,如果它被設置爲de_DE,則不僅「a」到「z」被認爲是字符,而且還像「ä」,「ö」,「è」等那樣是「exotics」。

此外,由於您不想要「俄語,日語等」,請注意u修飾符。輸入必須是UTF-8編碼,以便不破壞它並給你錯誤的結果。

0

使用hex codes,例如這將清除所有非ascii字符以及行尾,並用空格替換它們。空間(\x20)故意不在該範圍內,以便連續運行的空格和/或特殊字符被替換爲單個空格。

$clean = trim(preg_replace('/[^\x21-\x7E]+/', ' ', $input)); 
-1
if (strlen($str) == strlen(utf8_decode($str))) { 

}