2017-02-25 9 views
-1

ユーザー入力に余分な文字や変更された文字があっても、正規表現を使用して単語を照合しています。たとえば、ユーザー入力がpgoneの場合、正規表現はphoneと一致するはずです。または、ユーザー入力がphiniの場合は、phoneと一致する必要があります。私はこれをどうやって行うのか分かりません。REGEXPスマート余白検出

私は次のことを試してみましたが、それは私にいくつかの余分な言葉と一致します。

[[:<:]](p|)[a-zA-Z]{0,2}(g|)[a-zA-Z]{0,2}(o|)[a-zA-Z]{0,2}(n|)[a-zA-Z]{0,2}(e|)[a-zA-Z]{0,}[[:>:]]を。あなたは何ができるか

+2

http://php.net/levenshtein –

+1

これは、「正しい」単語にマップされた許容可能なスペルミス、または編集距離をターゲット単語にマッピングするメトリックを使用したマッピングで行うとよいでしょう。正規表現のアプローチは急速にあなたの目標のために管理不能に成長します。 – dawg

答えて

0

は、ユーザーが原子団を使用して行うことを期待して、正確なミスを定義している:

^(?>phone|phine|pgone|phoni|ghone.|p?one|p.one)$ 

あなたは他の可能なタイプミスを一致させるために他のいくつかの単語やパターンを追加することができますが、私はこのことを考えていませんここに行く道があるはずです。入力した文字列と正しい文字列との距離を調べるには、Paul Crovellaが提案したLevenshtein距離を計算する必要があります。

+0

ありがとう! :* –

関連する問題