设置最大长度,空间要求和最小字符

时间:2016-11-01 11:57:45

标签: regex

我有一个非常具体的要求检查(在名称字段上),但不知道如何生成所需的正则表达式。

要求如下:

  • 字符串必须不超过35个字符
  • 该字符串将允许大写和小写字符,连字符和撇号
  • 字符串必须包含至少2个字符的2个(空格分隔)字词
  • 如果符合以下条件,这两个词可以是任意长度:
    • 这两个字至少为2个字符
    • 单词之间包含空格字符
    • 所有字符(包括空格字符)的总和不能超过35个字符

基于此,以下字符串应该得到定义的结果:

成功

Bartholomew Jamieson-Smithson-West
Mellisa Wu
Li Smith

故障

Andy Bartholomew-Jamieson-Smithson-West
L Bartholomew-Jamieson-Smithson-Wu

2 个答案:

答案 0 :(得分:0)

您可以使用以下正则表达式执行此操作:

/^(?!.{36,})[a-z'-]{2,}\s[a-z'-]{2,}/gmi

请参阅此in action at Regex101

说明

匹配符合以下条件的字符串:

  1. ^(?!.{36,})不是36个字符或更长
  2. [a-z'-]{2,}以仅包含" a"的单词开头。 - " z","'"和" - "
  3. \s后面跟一个空格
  4. [a-z'-]{2,}后跟2中描述的词。
  5. 但是,您应该指定以下标志:gmi

    1. g获取所有匹配项,而不仅仅是第一个
    2. m单独对待
    3. i匹配没有大小写敏感性,因为这不是一个要求,并且会夸大表达式;)

答案 1 :(得分:0)

试试这个:

/(?=^[A-Za-z-' ]{1,35}$)(?=.*[a-z-']{2,}\s.*[a-z-']{2,}).*/gmi

Explanation

  1. (?=^[A-Za-z-' ]{1,35}$) 正面检查长度小于36。
  2. 如果匹配的话, (?=.*\w{2,}\s.*\w{2,}) 正向前检查两个字是否存在超过2个字符。

  3. 如果匹配则 .* - >匹配整个字符串