2017-02-25 63 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

非常感谢! :* –