我正在编写一些正则表达式+查询以匹配美国电话号码。具有负前瞻的下一个从正则表达式角度进行验证,但由于不支持负前瞻而在Oracle中不起作用。任何人都可以帮我修改查询以在Oracle中工作吗?
select 'match' from dual WHERE REGEXP_LIKE('16665555555', '^1?(?!911)[2-9][0-9]{9}$');
它不会为oracle中的任何数字返回匹配。
谢谢, 安迪
答案 0 :(得分:5)
WHERE REGEXP_LIKE(phone, '^1?[2-9]\d{9}$') and not REGEXP_LIKE(phone, '^1?911')
答案 1 :(得分:0)
我认为公认的答案是做到这一点的最好,最清晰的方法。但是,仅供参考,针对这种情况的另一种选择是将您希望的对前三个字符的限制(在可选的“ 1”之后)组合起来,并使用替代来覆盖所有可能的情况。
在这种情况下,我们可以用三种可能性覆盖前三个字符(在可选的“ 1”之后)的所有可能的允许情况:
将所有内容放在一起,我们得到:
select 'match' from dual WHERE REGEXP_LIKE('9115555555', '^1?([2-8][0-9]{2}|9[02-9][0-9]|91[02-9])[2-9][0-9]{6}$');