Подтвердить что ты не робот

Regex - как исключить одно слово?

Я использую http://www.position-absolute.com/articles/jquery-form-validator-because-form-validation-is-a-mess/ для проверки. Правила проверки определяются следующим образом:

            "onlyLetterSp": {
                "regex": /^[a-zA-Z\ \']+$/,
                "alertText": "* Only letters"
            }

Я хотел бы добавить новое правило, которое исключает одно слово. Я прочитал некоторые подобные вопросы в StackOverflow и попытался объявить его с чем-то вроде этого

"regex": /(?!exclude_word)\^[a-zA-Z\ \']+$/,

Но это не сработало. Можете ли вы дать мне несколько советов, как это сделать?

4b9b3361

Ответ 1

\b(?:(?!word)\w)+\b

Не будет соответствовать "слову".

Ответ 2

Это подходящее время для использования утверждений о границах слов, таких как @FailedDev, но нужно проявлять осторожность, чтобы избежать отклонения определенных не-TOO-особых случаев, таких как wordy, wordsmith или даже не так явно такие случаи, как sword или foreword

Я считаю, что это будет работать очень хорошо:

\b(?!\bword\b)\w+\b

Это выражение разбито:

\b        # assert at a word boundary
(?!       # look ahead and assert that what follows IS NOT... 
  \b      #   a word boundary
  word    #   followed by the exact characters `word`
  \b      #   followed by a word boundary
)         # end look-ahead assertion
\w+       # match one or more word characters: `[a-zA-Z0-9_]`
\b        # then a word boundary

Выражение в исходном вопросе, однако, соответствует более чем символам слов. [a-zA-Z\ \']+ соответствует пробелам (для поддержки нескольких слов на входе) и одинарным кавычкам (для апострофов?). Если вам нужно разрешить слова с апострофами в них, используйте следующее выражение:

\b(?!\bword\b)[a-zA-Z']+\b

RegexBuddy test to exclude a 'word' from matching

Ответ 3

Неясно, из вашего вопроса, что вы хотите, но я интерпретировал его как "не соответствующий ввод, содержащий определенное слово". Регулярное выражение для этого:

^(?!.*\bexclude_word\b)