首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >5-7个字符的Regex,如果包含空格(不允许特殊字符),则为6-8。

5-7个字符的Regex,如果包含空格(不允许特殊字符),则为6-8。
EN

Stack Overflow用户
提问于 2022-02-15 11:34:14
回答 1查看 250关注 0票数 0

我试图为一些基本的邮政编码验证创建一个regex。它不需要提供完全的验证(例如,在我的用法中,遗漏空格是很好的),但是它确实需要检查所使用的字符的数量,并且确保除了空格之外没有其他特殊的字符。

到目前为止,这就是我所拥有的:

代码语言:javascript
复制
^[\s.]*([^\s.][\s.]*){5,7}$

这主要是可行的,但它有两个缺陷:

  1. 它允许任何字符,而不仅仅是字母数字字符+空格。
  2. 它允许插入多个空格:

我已尝试将其更新如下:

代码语言:javascript
复制
^[\s.]*([a-zA-Z0-9\s.][\s.]*){5,7}$

这似乎已经修复了字符问题,但仍然允许插入多个空格。例如,应允许这样做:

AB14 4BA

但这不应该:

AB1 4 4 4BA

我如何修改代码以将空格的数量限制在最多一个(完全没有空格是好的)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-15 11:45:11

根据你目前的一套规则,你可以说:

代码语言:javascript
复制
^(?:[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+字母数字字符;
    • )$ -关闭非捕获组并匹配终端线锚.

或者,为了防止出现多个空格(或开始时),可能会出现负前瞻:

代码语言:javascript
复制
^(?!\S*\s\S*\s|\s)(?:\s?[A-Za-z0-9]){5,7}$

请参阅在线演示,为了演示目的,我将\s替换为[^\S\n]。此外,虽然表达式较短,但后者将采取更多步骤来计算输入。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71125731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档