2015-07-24 2 views
2

я должен проверить, если строка имеет следующие требования:Regex - буквенно-цифровой определенной длины и числа, большие нулевой

  • Удельная длина 7
  • Alphanumeric позволены
  • Числовые значения после альфа-значений должны быть больше нуля: - B000100 нормально - B000000 не нормально
  • Слова не могут начать следующие символы: - KZ, SA, SS, HJ, S, D

Я уже построил регулярок шаблон, но проблемы со значениями альфа с следующими номерами больше ноль у меня есть проблемы:

VALID

A000001

AB00001

A100000

A100001

ABCABCA

GR00001

GR12345

НЕвЕРНЫЙ

A000001A

A0000012A

A000000

GR00000

ABCAB00

Regex Pattern: ^(?!^KZ) (?!^HJ) (?!^S) (?!^D) (?! 0 {7}) [A-HJ-Z0-9] {7} $

Как проверить эти значения?

A000000

GR00000

ABCAB00

+2

Просто с регулярным выражением может быть довольно сложно. Вы хотите использовать что-то вроде perl или python? –

+0

Если в шаблоне может быть несколько «чисел», например 'A000B00', где оба числа должны быть отличными от нуля, это будет слишком сложно для регулярного выражения. Не используйте его. – Lynn

ответ

1

Это регулярное выражение ^(?!KZ|HJ|S|D|([A-HJ-Z]+)?0+$)[A-HJ-Z0-9]{7}$ будет делать. См demo

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

  • KZ
  • HJ
  • S
  • D
  • ([A-HJ-Z]+)?0+$ Это один обеспечит вам не может иметь 0 до конца строки optionnaly с char раньше.

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

+0

Обратите внимание, что это регулярное выражение будет отмечать '0000000' как действительное. Не обязательно проблема, поскольку вопрос не указывает на это, но думал, что стоит выделить. – Alec

+0

Это хороший подход, он работает для всех примеров, но из описания кажется, что A10000A не соответствует (всегда число в конце кажется), но ваше выражение будет соответствовать этому. – maraca

+0

@maraca Требования неясны в этой части (char следуют по номеру или смешанному) – Tensibai