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

标签 mysql regex

我正在尝试清除数据集中的错误电话号码条目。在 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/

相关文章:

python - 对一些杂乱的数据进行迭代和平均

php - 如何将内容动态创建到数据库中并显示在网页上?

php - 当我在 php 代码中运行具有特定值的查询时,它不返回任何行

mysql - 如何在 Windows 7 中使用命令行执行大型 MySQL 数据插入脚本文件?

php - 使用php检测引号外的字符

Python:恰好 $n$ [?o] 的正则表达式,至少有一个 [o]

javascript - 为什么这个 JavaScript 正则表达式会在浏览器中崩溃?

php - 如何使用 PHP 从 MySQL 查询中输出带有行跨度的表

php - SELECT 中带有 OR 的 Mysql PDO 语句

php - preg_match_all php 的奇怪行为