RegEx для проверки трех буквенно-цифровых условий - PullRequest
0 голосов
/ 13 мая 2019

У меня есть текущее регулярное выражение, которое отлично работает:

^[a-zA-Z]{2}[0-9]{8}$

Это работает для существующего шаблона, содержащего ровно 2 буквы, за которыми следуют ровно 8 цифр, например, AB12345678 или yZ01928374

Мне нужнозамените его на новое регулярное выражение, которое удовлетворяет 3 условиям:

1) если за первыми 2 буквами следует одна цифра «9», то за ней могут следовать 7 или 8 цифр [0-9]{7,8}.Например, действительны AB91234567 или AC912345678.

2) если за первыми двумя буквами следует одна цифра от 0 до 5, то за ней могут следовать ровно 8 цифр [0-9]{8}.Например, AB412345678

3) если за первыми 2 буквами следует цифра от 6 до 8, то за ней могут следовать ровно 7 цифр [0-9]{7}.Например, AB71234567

У меня есть кусочки, но я действительно не уверен, как соединить все 3 условия в одном хорошем выражении.

Ответы [ 2 ]

3 голосов
/ 13 мая 2019

Вы можете использовать чередование и добавить нужные правила для значений, после которых следуют первые два алфавита

let test = ['AB91234567','AB412345678','AB912','ABC123']

test.forEach( value => {
  console.log(/^[a-zA-Z]{2}(?:9\d{7,8}|[0-5]\d{8}|[6-8]\d{7})$/.test(value))
})
3 голосов
/ 13 мая 2019

Вы можете использовать чередования для определения различных условий и использовать это регулярное выражение,

^[a-zA-Z]{2}(?:9[0-9]{7,8}|[0-5][0-9]{8}|[6-8][0-9]{7})$

Пояснение:

  • ^ - начало строки
  • [a-zA-Z]{2} - соответствует двум алфавитам
  • (?: - начало шаблона не группирования
  • 9[0-9]{7,8} - Если следующая цифра - 9, за ней могут следовать от 7 до 8 цифр
  • | - Чередование
  • [0-5][0-9]{8} - Если следующая цифра от нуля до пяти, то она может содержать только восемь цифр
  • | - Чередование
  • [6-8][0-9]{7}) - Если следующая цифра от шести до восьми, то она может иметь только семь цифр и конец негруппового шаблона
  • $ - конец строки

Regex Demo

JS Code demo,

const arr = ['ab91234567','ab912345678','ab9123456789','sd012345678','sd0123456789','df71234567','df712345678']

arr.forEach(x => console.log(x + " --> " + /^[a-zA-Z]{2}(?:9[0-9]{7,8}|[0-5][0-9]{8}|[6-8][0-9]{7})$/.test(x)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...