【发布时间】:2012-11-08 07:06:02
【问题描述】:
我们的数据库可以包含不同格式的手机号码,例如:“(731) 123-4567”或“731-123 45 67”或“731-12-3-[4567]”等。
此外,我在搜索 API 中获得的输入可以是任何格式。
因此,当我需要在 db 中查找具有移动设备的用户时,我会清理输入数字,使其看起来像“7311234567”,然后用正则表达式 '(\\+|\\-|\\(|\\)|\\[|\\]| )*' 包装/填充它,例如,SQL 看起来像这样:
select * from contact where mobile REGEXP '(\\+|\\-|\\(|\\)|\\[|\\]| )*
1(\\+|\\-|\\(|\\)|\\[|\\]| )*7(\\+|\\-|\\(|\\)|\\[|\\]| )*
3(\\+|\\-|\\(|\\)|\\[|\\]| )*1(\\+|\\-|\\(|\\)|\\[|\\]| )*
2(\\+|\\-|\\(|\\)|\\[|\\]| )*9(\\+|\\-|\\(|\\)|\\[|\\]| )*
8(\\+|\\-|\\(|\\)|\\[|\\]| )*0(\\+|\\-|\\(|\\)|\\[|\\]| )*
7(\\+|\\-|\\(|\\)|\\[|\\]| )*4(\\+|\\-|\\(|\\)|\\[|\\]| )*
0(\\+|\\-|\\(|\\)|\\[|\\]| )*';
问题是,当我得到像“11234567”这样的输入时,它就像“7311234567”但没有“73” - 当查询执行时 - 它还会找到具有“7311234567”的用户。
问题:如何更好地包装我的正则表达式,使其仅适合正则表达式的完整数字?
【问题讨论】:
-
您是否尝试过删除任何非数字字符并比较两者?
-
@Alex - 我无法控制数据库中保存的数字。假设它们可以是任何格式,这就是我选择正则表达式解决方案的原因,但我不确定如何添加到正则表达式长度的精确匹配。 10x