【发布时间】:2012-06-15 03:07:52
【问题描述】:
如何在 Oracle 中将电话号码(或任何号码)正则表达式化为完全正确的长度,后跟一个非数字,然后可能又是数字?
例如
SELECT 1 FROM DUAL WHERE
REGEXP_LIKE('555-5555x123', '^[0-9]{3,4}[^[:digit:]][0-9]{4}.*$')
数字 555-5555 可以,555-5555x123 可以,但 555-5555123 不行。
可能发生的情况是手指粗的人在输入电话号码时添加了额外的数字而出错(请不要说应该限制输入格式,这不是我的数据),这应该被标记为问题.那么这个例子更像是 555-55545x123。
Oracle REGEXP_LIKE 的测试用例 价值结果 555-5555 好的 555-5555x123 好的 555-55551x123 失败 555-55551 失败 555-5555555失败
【问题讨论】:
-
为什么
555-5555x123可以? -
555-5555x123 没问题,因为 x 之前的电话号码部分定义明确,我可以确定它至少是正确的长度。使用 555-55545x123 我知道出了点问题。