gpt4 book ai didi

mysql - RegExp 在查询中匹配电话号码格式的问题

转载 作者:行者123 更新时间:2023-11-29 00:00:44 28 4
gpt4 key购买 nike

我正在尝试为 MySQL 编写一个 RegExp,它将只返回以下 3 种电话格式:

+1 000-000-0000 x0000

+1 000-000-0000

000-000-0000 x0000

000-000-0000

所以基本上:

+[任意位数][空格][任意三位数]-[任意三位数]-[任意四位数][空格][x][任意位数]

国家代码和扩展名是可选的。我是这些新手,但我认为这应该至少返回一个数字,包括国家代码和扩展选项,但是当我执行它时我得到 0 个结果。

\x2B[0-9]*\x20[0-9]{3}\-[0-9]{3}\-[0-9]{4}\x20x[0-9]+|
\x2B[0-9]*\x20[0-9]{3}\-[0-9]{3}\-[0-9]{4}|
[0-9]{3}\-[0-9]{3}\-[0-9]{4}

有人能告诉我为什么即使我的数据库中有 +1 555-555-5555 x5555 这样的记录,我还是得到 0 个结果。还有什么是使国家代码和扩展名是可选的语法

请注意我正在使用 [0-9] 因为我正在查询一个文本字段并且\d 似乎没有返回任何东西,即使我的条件很简单,比如\d*

最佳答案

因此,作为共同努力,答案就在这里:

SELECT * FROM table 
WHERE field
REGEXP '(^[+][0-9]+\ )?([0-9]{3}\-[0-9]{3}\-[0-9]{4})(\ x[0-9]+$)?'

首先是 mysql 中的字符代码(x20、x2B 等)是不允许的。下一个重要步骤是使用括号和“?”使不同部分可选的 token 。

============

我认为问题在于缺少用于定义子表达式的括号。

这似乎对我有用,尽管它看起来并不漂亮:

SELECT '+1 000-000-0000 x0000' REGEXP '^(([+][0-9]*\[ ][0-9]{3}\-[0-9]{3}\-[0-9]{4}[ ]x[0-9]+)|())$'

同样

SELECT '' REGEXP '^(([+][0-9]*\[ ][0-9]{3}\-[0-9]{3}\-[0-9]{4}[ ]x[0-9]+)|())$'

和(普通电话号码)一样:

SELECT '555-555-5555' REGEXP '^(([+][0-9]*\[ ])*[0-9]{3}\-[0-9]{3}\-[0-9]{4}([ ]x[0-9]+)*)|())$'

编辑:(与上面相同的正则表达式,但针对带有国家代码和扩展名的版本进行测试):

SELECT '+1 555-555-5555 x55' REGEXP '^(([+][0-9]*\[ ])*[0-9]{3}\-[0-9]{3}\-[0-9]{4}([ ]x[0-9]+)*)|())$'

当我尝试你的时:

SELECT '+1 000-000-0000 x0000' REGEXP '\x2B[0-9]*\x20[0-9]{3}\-[0-9]{3}\-[0-9]{4}\x20x[0-9]+|' 

我得到:

1139 - Got error 'empty (sub)expression' from regexp 

关于mysql - RegExp 在查询中匹配电话号码格式的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29988109/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com