RegEx для сопоставления только цифр и максимум 3 символа - PullRequest
0 голосов
/ 07 сентября 2018

Может кто-нибудь дать мне подсказку, почему следующий RegEx не работает? Я пытаюсь проверить строку, которая должна содержать как минимум одно число 0-9 в начале или конце и максимум 3 символа (A-Z), включая пробелы. Я попробовал:

^[0-9]{1,}\s*\w{0,3}|\w{0,3}\s*[0-9]{1,}

Но RegEx выше соответствует всему, что содержит эти символы. Но я хочу убедиться, что он совпадает только в том случае, если в моей строке не более нужных символов и цифр.

Должен вернуть true:

  • 9 ааа
  • 99244 ааа
  • ABC 321

Должен возвращать false:

  • 9999 fjejdhshsh dud
  • 9 Dudu du
  • Hdjdjso djs 99

Я был бы очень признателен, если бы кто-нибудь дал мне подсказку.

1 Ответ

0 голосов
/ 07 сентября 2018

Есть пара вещей:

  • Вы только закрепляете ^ первый вариант.

  • И вам, вероятно, следует также использовать $, если вы хотите подтвердить всю строку.

  • В противном случае вторая альтернатива |\w{0,3}\s* может совпадать с в любом месте (и также будет действительно соответствовать пустой строке)

  • Кроме того, сделайте это более читабельным с \d+ вместо [0-9]{1,}

  • Но более строго для [A-Z][0,3} вместо \w (может совпадать с числами).

Итак, по существу:

/^(
     \d+ \s* [A-Z]{0,3}    # 123 ABC
  |
     [A-Z]{0,3} \s* \d+    # ABC 123
  )$
/ix   # /x flag for readability
...