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

如何编写SELECT正则表达式实现底盘序列号合规校验

底盘序列号校验正则解决方案

校验规则澄清

根据你提供的用例,实际校验规则如下(原需求描述存在笔误):

  • 仅允许包含大小写英文字母、阿拉伯数字,不允许其他字符(如横杠、下划线等)
  • 相同字符仅允许连续出现,不允许间隔其他字符后重复出现

原有正则的问题

  • 你编写的正则^(?!.*?([\w])\1).+作用是禁止任何连续重复的字符,和实际要求的规则完全相反,这是返回结果不符合预期的核心原因
  • 其次\w在Oracle正则中包含下划线_,不符合仅允许字母和数字的要求

正确实现方案

正则表达式

^(?!.*(.)(?!\1).*\1)[A-Za-z0-9]+$

规则说明

  • ^[A-Za-z0-9]+$ 限制整个字符串仅由字母和数字组成,拦截含特殊字符的序列号
  • (?!.*(.)(?!\1).*\1) 是负向预查,禁止出现「某个字符后面跟着不同字符、之后又出现相同字符」的情况,保证相同字符只能连续排列

测试SQL

-- 校验通过的用例返回值大于0,校验不通过返回0
-- 合法用例测试
SELECT REGEXP_INSTR('1234567890', '^(?!.*(.)(?!\1).*\1)[A-Za-z0-9]+$') FROM dual; -- 返回1
SELECT REGEXP_INSTR('aaaaaaaaaa', '^(?!.*(.)(?!\1).*\1)[A-Za-z0-9]+$') FROM dual; -- 返回1
SELECT REGEXP_INSTR('aaabbbcccd', '^(?!.*(.)(?!\1).*\1)[A-Za-z0-9]+$') FROM dual; -- 返回1
SELECT REGEXP_INSTR('1088', '^(?!.*(.)(?!\1).*\1)[A-Za-z0-9]+$') FROM dual; -- 返回1,符合预期

-- 非法用例测试
SELECT REGEXP_INSTR('13er4t691d', '^(?!.*(.)(?!\1).*\1)[A-Za-z0-9]+$') FROM dual; -- 返回0
SELECT REGEXP_INSTR('vc-376t65e', '^(?!.*(.)(?!\1).*\1)[A-Za-z0-9]+$') FROM dual; -- 返回0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:24:04