Я хочу код регулярного выражения, который принимает только список символов, разделенных запятой или пробелом - PullRequest
2 голосов
/ 30 марта 2019

Итак, моя проблема в том, что у меня есть текстовое поле, и я хочу, чтобы пользователь печатал только список дней и не принимал никаких других слов, например:

    monday tuesday saturday 
    or monday,tuesday,saturday 

это то, что я написал

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

но это не сработало, я не знаю, почему я новичок в регулярных выражениях, и мне нужна помощь, спасибо, ребята.

Ответы [ 2 ]

2 голосов
/ 30 марта 2019
^((monday|tuesday|wednesday|thursday|friday|saturday|sunday)[, ])*(monday|tuesday|wednesday|thursday|friday|saturday|sunday)$

^ будет привязывать шаблон, соответствующий началу значения, а $ привязывает конец значения. Комбинация этих двух означает, что шаблон будет совпадать только в том случае, если все значение совпадает. Без якорей шаблон будет соответствовать всему, что содержит шаблон.

В шаблоне говорится, что это должно быть ноль или более dayname, затем пробел или запятая, за которым следует имя дня.

0 голосов
/ 30 марта 2019

В вашем шаблоне последняя труба | чередования должна быть закрывающей скобкой, чтобы закрыть группу, и вы не учитываете запятую или пробел.

\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демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...