所以我的问题是我有一个文本字段,并且我希望用户仅键入天数列表,并且不接受任何其他单词,例如:
monday tuesday saturday
or monday,tuesday,saturday
这就是我写的
"\b(monday|tuesday|wednesday|thursday|friday|saturday|sunday|\b"
但这没用,我不知道为什么我是正则表达式初学者,我需要一些帮助,谢谢大家。
答案 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)*$
如果您只允许使用指定的格式,例如,不允许使用空格和逗号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)*$