【问题标题】:Regular Expression Repeating Pattern delimited by comma以逗号分隔的正则表达式重复模式
【发布时间】:2017-02-17 18:07:02
【问题描述】:

我在 Javascript 中有以下正则表达式:

/\w{1,}\s*\w{1,}/  

这会检查一个字符串是否至少有两个单词大于 1 个字符。

前-

asd fgh - Valid  
a b d dfd - Valid  
xscxs - Invalid

我现在有一个新要求,我尝试实施,但无法做到。

新要求:能够拥有与以前相同类型的输入的逗号分隔列表。不能以逗号结尾。每个项目都必须根据上述规则有效。
如果没有逗号,那么它也是有效的。
此外,所有字符都是字母,没有数字/特殊字符

Valid:  HOH vfdffd,dsfds dfgd,UIU fgfd  
Valid:  JOI JOIO  
Invalid:  QASW fgdfg,  
Invalid:  sdfds,1234 dfgdfg  
Invalid:  JKJ,ABCD  

【问题讨论】:

标签: javascript regex validation


【解决方案1】:

您可以将第一个要求的模式指定为 [a-zA-Z]+(?:\s[A-Za-z]+)+ 以匹配 1+ 个字母字符,然后匹配 1+ 个空格序列 + 一个或多个单词字符,然后在另一个组内用逗号重复该模式:

/^[a-z]+(?:\s[a-z]+)+(?:,[a-z]+(?:\s[a-z]+)+)*$/i

查看regex demo(在演示中所有\s 都替换为空格,因为输入是一个多行字符串)。

如果允许多个空格,请将\s 替换为\s+

详情

  • ^ - 字符串开头
  • [a-z]+ - 1+ 个字母
  • (?:\s[a-z]+)+ - 1 个或多个序列(即必须有空格)
    • \s - 一个空格(添加 + 以匹配 1 个或多个出现)
    • [a-z]+ - 1+ 个字母
  • (?:,[a-z]+(?:\s[a-z]+)+)* - 零个或多个序列(即逗号是可选的)
    • , - 逗号
    • (?:\s[a-z]+)+ - 见上文
  • $ - 字符串结束。

【讨论】:

  • 所有字符都是字母,没有数字
  • 好的,\w 应该替换为[a-zA-Z][^\W\d_]
【解决方案2】:
.regex(/^(?:(?![0-9]{4}|[a-zA-Z]{4})[a-zA-Z0-9]{4})(?:(?:\b\,)(?![0-9]{4}|[a-zA-Z]{4})[a-zA-Z0-9]{4})*$/)

Explanation:

(?:\b\,) -> Match with a , at the beginning of the string only if its preceded by a word boundary
(?:(?![0-9]{4}|[a-zA-Z]{4})[a-zA-Z0-9]{4}) -> Match a string with letter and digits only if dont have 4 digits ow 4 letters

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多