You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL正则匹配电话号码报错:量词操作数无效求助

PostgreSQL正则匹配电话号码报错的解决办法

错误ERROR: invalid regular expression: quantifier operand invalid的根源是:你使用的正则是**扩展正则表达式(ERE)语法,但PostgreSQL的~操作符默认采用基本正则表达式(BRE)**模式,两种模式的元字符规则不同,导致语法解析失败。

解决步骤

方法1:切换到ERE模式(推荐)

在正则字符串前添加E前缀,即可使用ERE语法,无需大量转义元字符。修改后的正则如下:

~'E^([0-9]( |-)?)?(\\(?[0-9]{3}\\)?|[0-9]{3})( |-)?([0-9]{3}( |-)?[0-9]{4}|[a-zA-Z0-9]{7})$'

方法2:将正则转换为BRE格式

如果坚持使用BRE模式,需要对所有ERE元字符转义:

  • 分组()改为\(和\)
  • 或操作|改为\|
  • 量词?改为\?
  • 重复次数{n}改为\{n\}

修改后的正则:

~'^\\([0-9]\\( \\|\\-\\)\\?\\)?\\(\\(\\(?[0-9]\\{3\\}\\)?\\|[0-9]\\{3\\}\\)\\( \\|\\-\\)\\?\\(\\([0-9]\\{3\\}\\( \\|\\-\\)\\?[0-9]\\{4\\}\\|[a-zA-Z0-9]\\{7\\}\\)\\)$'

优化建议

你可以把正则里的( |-)替换为字符类[ -],让正则更简洁易读,优化后的ERE版本:

~'E^([0-9][ -]?)?(\\(?[0-9]{3}\\)?|[0-9]{3})[ -]?([0-9]{3}[ -]?[0-9]{4}|[a-zA-Z0-9]{7})$'

内容的提问来源于stack exchange,提问作者Derek Scott

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 21:38:11