过滤电话号码REGEXP

时间:2018-12-18 20:14:47

标签: mysql regex

我有一个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%')

1 个答案:

答案 0 :(得分:1)

您可以在此处将grouping constructalternation operator一起使用,例如

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

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

此外,[1]{1}模式等于1,因为每个模式默认情况下精确匹配一次(即{1}总是多余的),因此使用字符类{ {1}}内只包含一个符号,是指两个或多个符号,或避免转义一些符号,但是[...]不必转义,因为它是一个字符char,因此方括号是这里完全多余。