#regex
#регулярное выражение
Вопрос:
Требуется регулярное выражение для проверки строки со следующими правилами:
- Содержит только символы a-z, A-Z, 0-9, @, # и $.
- Первым символом в строке должен быть буквенный символ @, # или $. (т. е. не число)
- Не может быть числом или буквенными последовательностями SYS, PGM или APL.
- Длина не менее 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}$
В демонстрации смотрите совпадения и несоответствия.
Ссылка