2011-01-10 6 views
2

英語以外のすべての文字をキャッチする簡単な正規表現はありますか?共通の区切り記号や記号を使用する必要がありますが、ロシア語、日本語などの特殊文字は使用できません。正規表現で英語以外の文字を拒否しますか?

PHPで動作するものを探しています。

+0

なぜあなたはすべてのpunctuation‽は、あなたが本当にASCII文字への入力を制限するために欠けている英語の文字に制限はなく、できるように欠けていますか? –

+1

おそらくhttp://stackoverflow.com/questions/4619603/php-validate-string-characters-are-uk-or-us-keyboard-characters/4619747に関連しています –

+0

@Anon - 名前と住所にはアポストロフィ、コンマ、期間など、データがすべて英語になるようにデータを正規化したい。 –

答えて

0

このような[^ A-Za-z0-9 \、\。\ - ]?

+1

あなたはa-zを意味し、a-bは意味しません。 – CanSpice

+2

羽織の楽しさ ''あなたの正規表現を壊しています。 – delnan

+1

'、'、 '.'、' -'は、文字グループ内でエスケープする必要はありません。とにかく正規表現では特別な意味を持たないので、確かに '、'ではありません。 –

2

あなたのコメントにあなたのアドレスを参照するので、彼らはあまりにも数字が含まれる場合があります。したがって:

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

不要な文字を置き換える必要があります。 [:alpha:]クラスは、ロケールが正しく設定されている場合にのみ機能します。たとえば、de_DEに設定されている場合、「a」から「z」までの文字だけでなく、「ä」、「ö」、「è」などの「外来語」も考慮されます。

また、「ロシア語、日本語など」は望ましくないため、u修飾語に注意してください。入力を中断せず、間違った結果を出すには、入力をUTF-8でエンコードする必要があります。

0

hex codesを使用してください。 ASCII以外の文字や行末をすべて消去し、スペースで置き換えます。スペース(\x20)を意図的に範囲外にして、スペースや特殊文字の連続実行を1つのスペースに置き換えます。

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

} 
+0

実際に問題がどのように解決されているかわかりません。いくつかの説明はすてきだったでしょう。 –

関連する問題