首页 > 解决方案 > 过滤电话号码 REGEXP

问题描述

我有一个 MySQL 查询来查找以 +1 开头的 10 位电话号码

SELECT blah
FROM table
WHERE phone REGEXP'^\\+[1]{1}[0-9]{10}$' 

如何进一步过滤此 REGEXP 以仅搜索某些 3 位数的区号?(即共享美国号码格式的国际 10 位电话号码)

我尝试使用 IN 子句,即。IN('+1809%','+1416%')但最终出现语法错误

WHERE phone REGEXP'^\\+[1]{1}[0-9]{10}$' IN('+1809%','+1416%')

标签: mysqlregex

解决方案


您可以在此处使用带有交替运算符的分组构造,例如

REGEXP '^\\+1(809|416)[0-9]{7}$' 
             ^^^^^^^^^

只需从 10 中减去 3 即可匹配尾随数字。请注意,在 8.x 之前的 MySQL 版本中,您不能使用非捕获组,您只能使用捕获组。

此外,[1]{1}模式等于,1因为默认情况下每个模式只匹配一次(即始终是冗余的),并且使用内部只有一个符号{1}的字符类很有意义,它意味着两个或更多,或者避免转义[...]一些符号,但1不必转义,因为它是一个字字符,所以方括号在这里完全是多余的。


推荐阅读