在正则表达式中设置最小和最大字符数

新手上路,请多包涵

我写了一个 正则表达式,它匹配任意数量的字母,字母之间有任意数量的单个空格。我希望该正则表达式也强制执行最小和最大字符数,但我不确定该怎么做(或者是否可能)。

我的正则表达式是:

 [A-Za-z](\s?[A-Za-z])+

我意识到它只匹配一个空格周围的两组字母,所以我稍微修改了一下以解决这个问题。原来的问题仍然是一样的。

有没有办法强制至少三个字符和最多 30 个字符?

原文由 CorayThan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 813
2 个回答

是的

就像 + 意味着你可以使用一个或多个 {3,30} 来匹配3到30

例如 [a-z]{3,30} 匹配 3 到 30 个小写字母

来自 Pattern 类的文档

> X{n,m}    X, at least n but not more than m times
>
> ```

在您的情况下,匹配 3-30 个字母后跟空格可以通过以下方式完成:

([a-zA-Z]\s){3,30}


如果您需要尾随空格,如果不需要,您可以使用:(2-29 次字母+空格,然后是字母)

([a-zA-Z]\s){2,29}[a-zA-Z]


如果你想让空格算作字符,你需要将该数字除以 2 才能得到

([a-zA-Z]\s){1,14}[a-zA-Z]

”`

如果尾随空格是可选的,您可以将 \s? 添加到最后一个。这些都在 RegexPlanet 上进行了测试

如果您希望整个字符串的长度在 3 到 30 个字符之间,您可以使用先行添加 (?=^.{3,30}$) 在 RegExp 的开头并删除其他大小限制

综上所述,老实说,我可能只是测试 String.length 属性。它更具可读性。

原文由 Benjamin Gruenbaum 发布,翻译遵循 CC BY-SA 3.0 许可协议

这就是你要找的

^[a-zA-Z](\s?[a-zA-Z]){2,29}$

^ 是字符串的开始

$ 是字符串的结尾

(\s?[a-zA-Z]){2,29} 将匹配 (\s?[a-zA-Z]) 2 到 29 次..

原文由 Anirudha 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题