Требуется регулярное выражение для проверки строки со следующими правилами:

#regex

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

Вопрос:

Требуется регулярное выражение для проверки строки со следующими правилами:

  1. Содержит только символы a-z, A-Z, 0-9, @, # и $.
  2. Первым символом в строке должен быть буквенный символ @, # или $. (т. е. не число)
  3. Не может быть числом или буквенными последовательностями SYS, PGM или APL.
  4. Длина не менее 3 символов и не более 8 символов.

Я думаю, что у меня есть первые три, покрытые:

 ^(((?!SYS|PGM|APL)^[a-zA-Z])[a-zA-Z0-9@#$]{3,9}) $
  

Но я не могу заставить работать 4-е правило (длина). Я новичок в этом деле, поэтому буду очень признателен за любую помощь.

Совпадения: abc, abc123, abcdef, a1234567, a #123ST, A098 $, @home #1

Несоответствия: 12345, 1abcdef, PGM, APL, APL001, PGMabcd, SYS012

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

1. Я думаю, это из — за в конце перед $ . Я не думаю, что тебе это нужно.

Ответ №1:

Во-первых, вы опускаете @#$ в качестве первой буквы. Во-вторых, вы разрешаете строки от 4 до 10 символов (первый плюс от 3 до 9). В-третьих, вы оборачиваете все в () , что означает одно или несколько вложенных. Попробуйте это:

^((?!DBM|IBM|SYS)^[a-zA-Z@#$])[a-zA-Z0-9@#$]{2,7}$

Я думаю, что это тоже должно сработать:

(?!DBM|IBM|SYS)^[a-zA-Z@#$][a-zA-Z0-9@#$]{2,7}$

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

1. Почему вы используете привязку к началу строки ( ^ ) несколько раз?

2. Я не менял то, что было в OP.

3. Я говорил, что вы должны 🙂

4. Это позволит @IBM вводить

5. Учитывая, что в OP указано, что исходное регулярное выражение работает для правила 3, я предполагаю, что запрещены только строки, представляющие собой исключительно трехбуквенную исключенную последовательность, но разрешены строки, содержащие ограниченные последовательности.

Ответ №2:

Используйте это:

 ^(?!.*(?:SYS|PGM|APL))[a-zA-Z@#$][a-zA-Z0-9@#$]{2,7}$
  

В демонстрации смотрите совпадения и несоответствия.

Ссылка