【问题标题】:Oracle Regular Expression to match US Phone Number FormatOracle 正则表达式匹配美国电话号码格式
【发布时间】:2013-01-28 14:30:05
【问题描述】:

Oracle 正则表达式仅匹配以下格式的美国电话号码。

(NNN) NNN-NNNNNNN-NNN-NNNNNNNNNNNNNN

我已经尝试过了:

with test as
(
select '(444) 123-6780' as testcol from dual
union
select '444123-6780'                from dual
union
select '6741236780'                from dual
union
select '(445) 123-6781'            from dual
union
select '447-127-6787'            from dual
union
select '447-127-3333333333'            from dual
)
SELECT *
FROM test
WHERE REGEXP_LIKE(testcol, '^\(?\d{3}\)?([[:blank:]|-])?\d{3}-?\d{4}$');

结果:

(444) 123-6780  -- valid
(445) 123-6781  -- valid
444123-6780     -- not valid
447-127-6787    -- valid
6741236780      -- valid

如你所见,我收到了444123-6780 (NNNNNN-NNNN) 格式, 我不需要。

有什么办法可以阻止上述格式不匹配?

【问题讨论】:

标签: regex oracle regexp-like


【解决方案1】:
REGEXP_LIKE(testcol,'^(\(\d{3}\))([[:blank:]])\d{3}-\d{4}$|^\d{3}(-)\d{3}(-)\d{4}$|^\d{10}$')

【讨论】:

  • 我认为可以使用单个正则表达式字符串来完成 ;)... 但是由于 ([[:blank:]|-])?,早期的正则表达式将匹配格式为 NNNNNN-NNNN [444123-6780] 的字符串,这不是必需的。所以,我为每种格式制作了正则表达式字符串,OR 他们在一起
【解决方案2】:

试试这个 reg ex.. 它会帮助你

REGEXP_LIKE(testcol,'^\([0-9]{3}\)[:space:]?[0-9]{3}(-|[:space:])?[0-9]{4}$|^[0-9]{3}-?[0-9]{3}-?[0-9]{4}$')

来源:http://psoug.org/snippet/Regular-Expressions--RegExp-examples-3_859.htm

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-10
    • 1970-01-01
    • 2020-05-02
    • 2015-11-22
    • 2018-01-23
    • 1970-01-01
    • 2010-12-16
    相关资源
    最近更新 更多