Написание регулярного выражения для комплексной проверки

#javascript

#javascript

Вопрос:

Я должен проверить строку, которая может

  1. Начинается и заканчивается цифрами или буквами.
  2. должно содержать только строчные буквы, цифры, тире (-) , подчеркивания (_) и точки.
  3. должно содержать символы 3 to 63 . Имена, содержащие точки, могут содержать до 222 символов, но каждый разделенный точками компонент не может быть длиннее 63 символов.
  4. не может быть IP-адресом
  5. не удается начать с префикса "AABRA"

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

 ^[a-z0-9][-_. a-z0-9] [a-z0-9]$
  

Но как я могу проверить строку типа "abc.bys.123123" , где длина слова между . должна составлять от 3 до 63

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

1. Есть ли реальная необходимость пытаться втиснуть все это в одно регулярное выражение? Является ли регулярное выражение единственным, что у вас есть в этой среде, или вы можете выполнить дополнительное кодирование на JS?

2. {3,63} содержит от 3 до 63 символов, существует аналогичное выражение для выражения до 222 символов.

3. Я не понимаю, как «имена, содержащие точки, могут содержать до 222 символов» и что строка «должна содержать от 3 до 63 символов».

4. Общая длина строки не должна превышать 222 символов. Строка «aaaaaaaaaaaaaa.bbbbbbbbbbbbb.cccccccccccccc», здесь длина подстроки aaa или bbb или ccc должна составлять от 3 до 63, но в целом общая длина должна быть не более 222.

5. Так понятнее. И можете ли вы ответить на вопрос @ 04FS? Вы можете использовать только шаблон регулярных выражений по некоторым причинам или вы также можете использовать javascript?

Ответ №1:

Для m-n повторений используйте {m, n}. Таким образом, регулярное выражение будет ^[a-z0-9][-_. a-z0-9]{3,63}[a-z0-9]$

Редактировать: не совсем то, о чем вы просите. Но это должно помочь с правильной реализацией. Чтобы изучить регулярное выражение, попробуйте это https://regexone.com /

Ответ №2:

Попробуйте приведенное ниже регулярное выражение

^([a-z d][-_. a-z0-9]([a-z d] )){3,63}$

Протестировал упомянутые вами случаи

Тестовые примеры

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

1. «попробуйте это» не является полезным объяснением вашего решения.

2. регулярное выражение не проверяет длину подстроки между точкой(.) Например «ааааааааааааааааааааааааа.bbbbbb_-bbbbbbbbbb.cccccccc». в этом примере подстрока «aaaaa» может содержать более 63 символов.