我们的数据库可以包含不同格式的手机号码,例如:“(731)123-4567”或“731-123 45 67”或“731-12-3-[4567]”等。
另外,我得到的输入在 API 中进行搜索可以是任何格式。
因此,当我需要在 db 中查找具有移动设备的用户时,我会清理输入数字,使其看起来像 '7311234567' 然后用 regexp 包装/填充它,'(\\+|\\-|\\(|\\)|\\[|\\]| )*'
例如,SQL 看起来像这样:
select * from contact where mobile REGEXP '(\\+|\\-|\\(|\\)|\\[|\\]| )*
1(\\+|\\-|\\(|\\)|\\[|\\]| )*7(\\+|\\-|\\(|\\)|\\[|\\]| )*
3(\\+|\\-|\\(|\\)|\\[|\\]| )*1(\\+|\\-|\\(|\\)|\\[|\\]| )*
2(\\+|\\-|\\(|\\)|\\[|\\]| )*9(\\+|\\-|\\(|\\)|\\[|\\]| )*
8(\\+|\\-|\\(|\\)|\\[|\\]| )*0(\\+|\\-|\\(|\\)|\\[|\\]| )*
7(\\+|\\-|\\(|\\)|\\[|\\]| )*4(\\+|\\-|\\(|\\)|\\[|\\]| )*
0(\\+|\\-|\\(|\\)|\\[|\\]| )*';
问题是当我得到像“11234567”这样的输入时,它就像“7311234567”但没有“73”——当查询执行时——它也会找到带有“7311234567”的用户。
问题:如何更好地包装我的正则表达式,使其仅适合正则表达式的完整数字?