我正在尝试清除数据集中的错误电话号码条目。在 MySQL 中为过滤器制作正则表达式时遇到问题。
结构如下:
第一个数字是2-9
第二个和第三个数字可以是任何数字但它们不能是相同的数字
第四位数字在 2-9 之间
第五和第六位数字可以是除“11”之外的任何数字
我发现了一些相当复杂的reg表达式,但不太有效;但我确信有一种简单的方法。
“有效”数字可能如下所示:
2028658680
7137038891
我的过滤器通常会漏掉以下情况:
6778914351
7777777777
6178116678
请注意,这些数字完全是编造的。
最佳答案
这是可能的,但它会很长而且很难看。使用更强大的正则表达式引擎,您可以执行环视甚至条件语句,但据我所知,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 后跟数字的非捕获组t 1、非 1 的数字后跟 1,或两个非 1 的数字。
[0-9]{4}
4 个任意数字。
关于mysql - 有效美国电话号码的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45699789/