Как проверить действительную индийскую карточку с помощью регулярных выражений

#regex

#регулярное выражение

Вопрос:

Я пытаюсь проверить номер индийской карточки с помощью регулярных выражений.

Формат индийской карты pan — 5 букв — 4 цифры 0001-9999 — 1 Альфа

Я попробовал следовать регулярному выражению [A-Z]{5}[0-9]{4}[A-Z]{1}

Вообще говоря, он работает нормально, но это не совсем правильно для второго условия — он принимает 0000-9999, но мне нужно от 0001 до 9999. Как я должен изменить это регулярное выражение?

Комментарии:

1. Используйте предварительный просмотр: ^(?!0 $)[0-9]{4}$

2. Или ^(?!0000)d{4}$

Ответ №1:

Вы можете использовать отрицательный прогноз, чтобы отфильтровать правила, которые вам не нужны.

 ^(?!0 $)[0-9]{4}$
 
  • (?!0 $) означает, что если остальная часть следующего текста состоит только из 0 s, не пройдите тест.

Смотрите Доказательство

Редактировать

Если это не просто числа, вы можете удалить ^ и $ и вставить отрицательный прогноз (?!0{4}) перед [0-9]{4} :

 [A-Z]{5}(?!0{4})[0-9]{4}[A-Z]{1}
 

Комментарии:

1. и (?=0*[1-9]) еще один вариант

Ответ №2:

Я нашел ответ от @TonyR

 ^[A-Z]{5}(?!0000)d{4}[A-Z]{1}$
 

Комментарии:

1. Он {1} полностью избыточен, [A-Z] в нем уже указано соответствие одному символу в диапазоне от A до Z.