REGEX字符之间最多1个空格,前导或尾随空格

时间:2018-09-27 07:22:47

标签: regex

我有正则表达式,应该与以下内容匹配

  1. 没有前导或尾随空格

  2. {A-Z0-0}

  3. 单词之间最多只能有1个空格

  4. 包括空格在内的总数为35个字符

例如

(no space)ABC 123 450(no space) <-- Pass
(space)ABC 123 450(no space) <--Fail
(no space)ABC(space)(space)EFG(no space) <--Fail

我尝试过 ^\S{0,35}(?: \S+){0,35}$,但我仍然无法摆脱领先地位 谢谢

2 个答案:

答案 0 :(得分:0)

尝试以下模式:

^(?!.*[ ]{2,})(?:\S[A-Z0-9 ]{0,33}\S)?$

作为一种解释,(?!.*[ ]{2,})项是一个否定的超前行为,它断言输入 not 在任何地方都不包含两个或更多个连续空格。然后,(?:\S[A-Z0-9 ]{0,34})?项匹配一个非空格字符,后跟0到33个鞋面或数字,再跟另一个非空格。这涵盖单个字符或更多字符。为了解决输入匹配为空的情况,我们使用?将整个术语设为可选。

Demo

答案 1 :(得分:0)

假设您具有足够强大的正则表达式引擎,请使用零宽度预读来检查总长度(此处使用\w作为[0-9a-zA-Z]的代理,尽管这样可以使此处更易于阅读包括一些不需要的字符):

^(?=.{1,35}$)((\w+ )*?\w+$)

说明

^            Match the start
(?=.{1,35}$) At this point, there are between 1 and 35 characters before the end
(\w+ )*?     Match zero or more (preferring less) repetitions of
             one or more alphanumerics followed by a single space
\w+          Match one or more alphanumerics
$            End of the string