我想要一个仅接受用逗号或空格分隔的字符列表的正则表达式代码

时间:2019-03-30 03:43:43

标签: regex

所以我的问题是我有一个文本字段,并且我希望用户仅键入天数列表,并且不接受任何其他单词,例如:

    monday tuesday saturday 
    or monday,tuesday,saturday 

这就是我写的

    "\b(monday|tuesday|wednesday|thursday|friday|saturday|sunday|\b"

但这没用,我不知道为什么我是正则表达式初学者,我需要一些帮助,谢谢大家。

2 个答案:

答案 0 :(得分:2)

^((monday|tuesday|wednesday|thursday|friday|saturday|sunday)[, ])*(monday|tuesday|wednesday|thursday|friday|saturday|sunday)$

^锚定模式以匹配值的开头,$锚定在值的末尾。两者的组合意味着只有在整个值都匹配的情况下模式才会匹配。没有锚点,该模式将与包含该模式的任何内容匹配。

该模式是说它必须是零个或多个日名,后跟空格或逗号,然后是日名。

答案 1 :(得分:0)

在您的模式中,交替的最后一个管道|应该是用于关闭组的右括号,并且您没有考虑逗号或空格。

\b(monday|tuesday|wednesday|thursday|friday|saturday|sunday|\b
                                                           ^ 

如果您未在代码或工具中引用捕获组,则可以使用(?:而不是(使其不捕获

您可以更新模式以使用锚点^$来声明字符串的开始和结尾。然后匹配1天,并重复0+次以匹配另一天的逗号或空格。

^(?:mon|tues|wednes|thurs|fri|satur|sun)day(?:[, ](?:mon|tues|wednes|thurs|fri|satur|sun)day)*$

Regex demo

如果您只允许使用指定的格式,例如,不允许使用空格和逗号monday tuesday,saturday,则可以第一次捕获空格或逗号,然后使用\1使用反向引用:

^(?:mon|tues|wednes|thurs|fri|satur|sun)day(?:([, ])(?:mon|tues|wednes|thurs|fri|satur|sun)day)?(?:\1(?:mon|tues|wednes|thurs|fri|satur|sun)day)*$

Regex demo