我试图为一些基本的邮政编码验证创建一个regex。它不需要提供完全的验证(例如,在我的用法中,遗漏空格是很好的),但是它确实需要检查所使用的字符的数量,并且确保除了空格之外没有其他特殊的字符。
到目前为止,这就是我所拥有的:
^[\s.]*([^\s.][\s.]*){5,7}$这主要是可行的,但它有两个缺陷:
我已尝试将其更新如下:
^[\s.]*([a-zA-Z0-9\s.][\s.]*){5,7}$这似乎已经修复了字符问题,但仍然允许插入多个空格。例如,应允许这样做:
AB14 4BA
但这不应该:
AB1 4 4 4BA
我如何修改代码以将空格的数量限制在最多一个(完全没有空格是好的)?
发布于 2022-02-15 11:45:11
根据你目前的一套规则,你可以说:
^(?:[A-Za-z0-9]{5,7}|(?=.{6,8}$)[A-Za-z0-9]+\s[A-Za-z0-9]+)$查看在线演示
^ -启动线锚;(?: -开放的交替非捕获组;[A-Za-z0-9]{5,7} -只匹配5-7个字母数字字符;| -或;(?=.{6,8}$) -向前看断言位置至少有6-8个字符,直到结束线锚;[A-Za-z0-9]+\s[A-Za-z0-9]+ -匹配空格字符两侧的1+字母数字字符;)$ -关闭非捕获组并匹配终端线锚.或者,为了防止出现多个空格(或开始时),可能会出现负前瞻:
^(?!\S*\s\S*\s|\s)(?:\s?[A-Za-z0-9]){5,7}$请参阅在线演示,为了演示目的,我将\s替换为[^\S\n]。此外,虽然表达式较短,但后者将采取更多步骤来计算输入。
https://stackoverflow.com/questions/71125731
复制相似问题