有效美国电话号码的正则表达式

时间:2017-08-15 19:06:25

标签: mysql regex

我试图从错误的电话号码条目中清除数据集。无法在MySQL中为过滤器制作正则表达式。

结构如下:
第一个数字是2-9
第二和第三位可以是任何数字,除非它们可能不是相同的数字
Forth数字在2-9中 第五和第六位可以是任何数字,除了' 11'

我已经找到了一些相当复杂的注册表达式,这些表达式并不起作用;但我确信有一种简单的方法。

A"有效"数字可能如下:
2028658680个
7137038891

我的过滤器通常会错过以下情况:
6778914351个
7777777777个
6178116678

请注意,这些数字是完全弥补的。

1 个答案:

答案 0 :(得分:1)

这是可能的,但它会很长很难看。使用更强大的正则表达式引擎,您可以进行环视甚至是条件语句,但据我所知,MySQL并不支持这些内容。

^[2-9](?:0[1-9]|1[02-9]|2[013-9]|3[0-24-9]|4[0-35-9]|5[0-46-9]|6[0-57-9]|7[0-689]|8[0-79]|9[0-8])[2-9](?:1[02-9]|[02-9]1|[02-9]{2})[0-9]{4}$

https://regex101.com/r/qPuS5W/1

说明:

[2-9]第一个数字是2到9之间的任何数字。

(?:0[1-9]|1[02-9]|2[013-9]|3[0-24-9]|4[0-35-9]|5[0-46-9]|6[0-57-9]|7[0-689]|8[0-79]|9[0-8])非捕获组包含10个备选项,每个数字以0到9开头,后跟除该数字之外的任何数字。

(?:1[02-9]|[02-9]1|[02-9]{2})非捕获组,其中任何一个匹配1后跟一个不是1的数字,一个数字不是1,后跟1,或者两个数字不是1

[0-9]{4} 4个任意数字。