Регулярное выражение для соответствия строке, которая имеет четыре или более слов? - PullRequest
0 голосов
/ 20 марта 2020

Мне нужно проверить ввод HTML формы, чтобы в текстовом вводе было как минимум 4 слова. Например, «AB C D» будет соответствовать, а «AB C» - нет.

Я пытался разбить это на соответствие строки, которая имеет 3 или более одинарных пробела где угодно, но я новичок в регулярных выражениях на сегодняшний день. Я играл с вариациями /^ {3,}+$/, но понимаю, что это просто совпадение трех пробелов, повторяющихся подряд. Я взломал это несколько часов назад, поэтому я не могу вспомнить все, что я пытался сделать. Любая помощь с благодарностью!

Ответы [ 3 ]

1 голос
/ 20 марта 2020
^\w+(?: \w+){3,}$

Использование \s не рекомендуется, поскольку оно включает [\ t \ r \ n \ f]. То есть: \ s соответствует пробелу, табуляции, возврату каретки, переводу строки или переводу формы.

Пояснение \w+ проверка первого слова. (Это слово может содержать [a-zA-Z_]. ( \w+){3,} проверка на наличие следующих 3 или более слов (слово должно начинаться с пробела и иметь один или несколько символов слова).

0 голосов
/ 20 марта 2020

Если ваши слова разделены пробелами, вы можете просто набрать split() и подсчитать количество результатов, если оно равно 4 или более. Заметьте, что мы trim() в начале строки, чтобы начальные или конечные пробелы не увеличивали количество слов по ошибке:

let str = 'A B C D';

if (str.trim().split(' ').length >= 4)
  console.log("'" + str + "' is OK");

str = 'A B C ';

if (str.trim().split(' ').length >= 4)
  console.log("'" + str + "' is OK");
0 голосов
/ 20 марта 2020

Это не причудливо (все еще новы sh к их написанию), но оно работает:

\w+\s\w+\s\w+\s\w+([\s\w+]\w+)?

Соответствует любому количеству символов слова, за которыми следует пробел 3 раза или более и заканчивающийся символом слова.

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