javascript - 带破折号分隔符的 RegEX 14 位验证
问题描述
我正在使用以下正则表达式^[\d]{4}[-]?[\d]{6}[-]?[\d]{4}$
来验证 14 个数字作为一个整体或划分为
4 digits - 6 digits - 4 digits
以下四个示例与我的正则表达式匹配,但我想排除最后两个示例。
1111-111111-1111
- (根据我的业务逻辑有效)12341234561234
- (根据我的业务逻辑有效)1111-111111111
- (我希望这是无效的)1111111111-1111
- (我希望这是无效的)
解决方案
您可以对不想匹配的模式进行负面展望并使用此正则表达式,
^(?!\d{4}-\d{10})(?!\d{10}-\d{4})\d{4}-?\d{6}-?\d{4}$
解释:
^
--> 字符串开头(?!\d{4}-\d{10})
--> 负前瞻以避免匹配此模式(?!\d{10}-\d{4})
--> 负前瞻以避免匹配此模式\d{4}-?\d{6}-?\d{4}
--> 匹配你想要的模式$
--> 字符串结束
我能想到的另一种模式,更简单优雅,你可以用这个,
^\d{4}(-?)\d{6}\1\d{4}$
解释:
^
--> 字符串开头\d{4}
--> 正好匹配四位数字(-?)
--> 匹配一个可选的连字符并在组 1 中捕获\d{6}
--> 精确匹配六位数\1
--> 这确保两个连字符都存在或不存在,如正则表达式中所述\d{4}
--> 正好匹配四位数字$
--> 字符串结束
推荐阅读
- c++ - 同一行有多个项目的 QT 组合框
- r - 根据多行诊断代码分配诊断类别
- .net - .NET“Appcmd migrate config”因“用户名或密码不正确”而失败
- javascript - 将输入限制为 5 个字符(如果是整数)或 8 个字符(带分数)
- java - 如何在java中将整数YYYYmmDD转换为YYYY/mm/DD
- javascript - 如果页面上加载了某个 DIV,则使用 JavaScript 更改元素的显示设置
- c - 在实践中是否可以将数百万个小函数编译成静态二进制文件?
- java - 如何在 spring data elasticsearch 中添加 run-as 标头
- python - Pyinstaller 生成的 EXE 文件不起作用
- amazon-connect - Amazon Connect 中的渗透/忙碌音乐