正则表达式:匹配 phone 个没有字母的数字

Regular Expression: Matching phone numbers without letters in it

我正在尝试为我的 PL/SQL 代码中的某些检查构建一个正则表达式(所以我使用的是 Oracle 数据库,它可以使用 (POSIX) 标准草案 1003.2/D11.2)。

我想匹配所有可能是 phone 数字的输入变体。我已经创建了这个正则表达式:

[+0-9][0-9- ()_]{4,20}

我唯一的问题(得到我想要的)是:如果输入字符串中有任何字母将由我的正则表达式测试,则正则表达式将在 [=50 之后匹配=] 在字母之前。

示例 1:

Input: " 044-d4(54)1-_14455"
Match: "4(54)1-_14455"

--> "d"号内-->应该有没有匹配

例二:

Input: "044444-d4(54)1d-_14455"
Match1: "044444-"
Match2: "4(54)1"
Match3: "14455"

--> 数字内有两个"d" --> 应该有没有匹配

示例 3:

Input: "+904  4-4(54)1-_14455"
Match1: "+904  4-4(54)1-_14455"

--> 正确!我要这个匹配。

我只是想这样修改我的正则表达式,如果 phone 数字中有任何字母,它就不会 return 匹配。所有其他特殊字符,如 _-/() 都可以。

我已经用谷歌搜索过了,但我不是正则表达式方面的专家,所以我所有的尝试都没有成功...

您可以在正则表达式中使用字符串开头 (^) 和字符串结尾 ($)。

^[+0-9][0-9- ()_]{4,20}$