将提取澳大利亚手机号码的PHP兼容正则转换为MySQL兼容格式
澳大利亚手机号正则的MySQL兼容转换方案
原正则报错原因
MySQL 8.0之前的版本不支持PCRE的非捕获组(?:)语法,同时\d元字符在部分低版本MySQL中兼容性不佳,因此需要对原PHP正则做适配修改。
转换后兼容MySQL的正则
直接在REGEXP操作符中使用的写法:
^((\+|0{0,2})61(\s*[-]\s*)?|0?)?4[0-9]{8}$
如果是在SQL语句的字符串场景中使用,需要对反斜杠做转义,写法如下:
'^((\\+|0{0,2})61(\\s*[-]\\s*)?|0?)?4[0-9]{8}$'
兼容的号码格式
- 10位本地格式:如
0412345678 - 国际带+号格式:如
+61412345678 - 国际双零前缀格式:如
0061412345678 - 带空格/短横线分隔的格式:如
+61-412345678、+61 - 412345678
使用示例
查询手机号符合规则的用户记录:
SELECT * FROM 表名 WHERE 手机号字段 REGEXP '^((\\+|0{0,2})61(\\s*[-]\\s*)?|0?)?4[0-9]{8}$';
内容的提问来源于stack exchange,提问作者Irfan Momin
相关产品推荐
相关产品推荐

