Регулярное выражение, проверяющее, содержит ли строка хотя бы латинские буквы и, кроме того, может содержать цифры в произвольном порядке - PullRequest
0 голосов
/ 05 ноября 2019

Это регулярное выражение требует, чтобы строка содержала цифры в конце, но также возможны строки типа "aabbccd1bbb3bb", "vvvddhh3", "12kkk"

(?=(?:.*[a-z]){1,24})(?:.*\d){0,22}

Ответы [ 2 ]

1 голос
/ 06 ноября 2019

Вы можете сделать это без создания сложного шаблона регулярных выражений. Создайте два небольших шаблона, чтобы удалить символы, которые вы не хотите проверять. Например, фрагмент содержит регулярное выражение [^a-z]+, чтобы соответствовать всем символам не в нижнем регистре-альфа. Затем мы используем этот шаблон для удаления этих символов из строки, а затем можем подсчитать количество оставшихся символов. Это говорит нам о том, что aabbccd1bbb3bb имеет 12 буквенных символов. То же самое можно создать для цифр \D+. Затем вы можете добавить свою логику проверки ниже, чтобы убедиться, что она удовлетворяет другим ограничениям (например, 1 <= количество цифр <= 22 и т. Д.). </p>

Это гораздо проще понять, чем сложное регулярное выражение, и гораздо прощеизменить.

strings = [
  "aabbccd1bbb3bb",
  "vvvddhh3",
  "12kkk",
  "abcdefghijklmnopqrstuvwx12345678901234567890123", // too many digits
  "abcdefghijklmnopqrstuvwxy1234567890123456789012", // too many alpha
  "abcdefghijklmnopqrstuvwx1234567890123456789012"   // just right
]

r1 = /[^a-z]+/g
r2 = /\D+/g

for (s of strings) {
  a = d = s
  n_alpha = a.replace(r1,'').length
  n_digit = d.replace(r2,'').length
  console.log(`alpha: ${n_alpha}; digit: ${n_digit}`)
  // add your logic here
  // e.g.
  // if (n_alpha >= 1 &&  n_alpha <= 24) ...
}

Кроме того, чтобы проверить, заканчивается ли строка цифрой, просто сравните ее с \d$.

1 голос
/ 05 ноября 2019

«Требования», такие как «строка должна содержать как минимум ...», записываются как начальные косвенные утверждения на языке регулярных выражений, например,

^(?=.*[a-z])

читает «начало строки, за которым следует любое итогда латинская буква ". Тело вашего регулярного выражения может быть просто [a-z0-9], так как вы принимаете и буквы, и цифры в любом порядке.

Собирая все вместе,

re = /^(?=.*[a-z])[a-z0-9]+$/

test = [
  'aaa',
  'aaa33bb',
  '2019',
  '#*$)',
  '',
]

for (t of test)
  console.log(t, re.test(t))

Замените + на {1,nn}, если вы хотите ограничить общую длину строки.

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