正则表达式选择和替换以清理美国电话号码

埃里克印记

我们将电话号码列表作为数据馈送的一部分。它们都是针对北美公司的。我想删除任何前导“1”或“+1”以及任何尾随信息,如“x100”、“EXT400”等。它们存储在 MariaDB 中,所以我想这样做

UPDATE `CompanyPhone` SET `number`= REGEXP_SUBSTR(`number`,pattern)

要删除不需要的东西,我只需要 REGEX 来选择电话号码的正确部分。

"1 (555) 555-5555 x100" -> "(555) 555-5555"
"+15555555555 EXT400" -> "5555555555"
" 555-555-5555" -> "555-555-5555" (remove leading space)

基本上,我只需要前 10 个数字,如果第一个数字是 1,则忽略第一个数字,以及当前在前 10 个数字(“()”或“”或“-”)中的格式(如果可以保留的话)。

如果一切都可以重新格式化为 (555) 555-5555,那将是一个奖励,但不是必需的。如果需要,我可以进行第二次查询。

缺口

你可以用REGEXP_REPLACE这个。假设您使用的是 MariaDB 10.0.5 或更高版本,则可以使用PCRE正则表达式。对于您的示例表达式,此正则表达式将为您提供所需的结果(Regex101 上的演示)。它查找 3 组数字(3 位数字、3 位数字和 4 位数字),前面可能是 1,周围还有其他非数字字符(例如+, -)。

^(?:\D*)1?(?:\D*)(\d{3})(?:\D*)(\d{3})(?:\D*)(\d{4}).*$

所以你的UPDATE陈述将变成

UPDATE `CompanyPhone` SET `number`= REGEXP_REPLACE(`number`, '^(?:\\D*)1?(?:\\D*)(\\d{3})(?:\\D*)(\\d{3})(?:\\D*)(\\d{4}).*$', '(\\1) \\2-\\3')

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用正则表达式清理电话号码

来自分类Dev

美元符号美国电话号码正则表达式

来自分类Dev

正则表达式,用于验证美国电话号码格式

来自分类Dev

正则表达式以验证美国格式的电话号码

来自分类Dev

嵌套量词* C#正则表达式与美国电话号码匹配的例外

来自分类Dev

修改电话号码清理正则表达式以处理前1位数字

来自分类Dev

正则表达式支持免费电话号码和阿联酋号码

来自分类Dev

Perl电话号码正则表达式

来自分类Dev

正则表达式与荷兰电话号码

来自分类Dev

阿联酋电话号码正则表达式

来自分类Dev

正则表达式用于拆分电话号码

来自分类Dev

提取电话号码正则表达式

来自分类Dev

匹配电话号码,正则表达式

来自分类Dev

正则表达式的电话号码?

来自分类Dev

特定电话号码正则表达式

来自分类Dev

电话号码正则表达式

来自分类Dev

瑞典电话号码正则表达式

来自分类Dev

正则表达式-电话号码-Android

来自分类Dev

正则表达式红宝石电话号码

来自分类Dev

法国电话号码的正则表达式

来自分类Dev

正则表达式验证电话号码扩展

来自分类Dev

荷兰电话号码的正则表达式

来自分类Dev

电话号码的正则表达式

来自分类Dev

正则表达式的电话号码?

来自分类Dev

MVC 5正则表达式电话号码

来自分类Dev

正则表达式寻找好的电话号码

来自分类Dev

电话号码匹配正则表达式

来自分类Dev

用于电话号码验证的正则表达式

来自分类Dev

日本电话号码的正则表达式