RegEx для проверки URL с дополнительными портами - PullRequest
0 голосов
/ 28 апреля 2019

Я пытаюсь подключить это регулярное выражение, чтобы проверить, начинается ли URL-адрес с https, и если указан порт, единственные допустимые значения - 443 или 5443. Это регулярное выражение довольно близко, но не совсем там.

^(https:\/\/)([a-zA-Z\d\.]{2,})\.([a-zA-Z]{2,})(:5{0,1}443)?(.)*

Как мне решить эту проблему?

Ответы [ 3 ]

1 голос
/ 28 апреля 2019

Это основной валидатор URL, который проверяет, находится ли он между границами пробелов.
Он допускает только устройство https и номера портов 5443 или 443.

(?<!\S)https://(?:\S+(?::\S*)?@)?(?:(?:(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})))|localhost)(?::5?443)?(?:/[^\s]*)?(?!\S)

Версия для чтения

 (?<! \S )

 https ://
 (?:
      \S+ 
      (?: : \S* )?
      @
 )?
 (?:
      (?:
           (?:
                [1-9] \d? 
             |  1 \d\d 
             |  2 [01] \d 
             |  22 [0-3] 
           )
           (?:
                \.
                (?: 1? \d{1,2} | 2 [0-4] \d | 25 [0-5] )
           ){2}
           (?:
                \.
                (?:
                     [1-9] \d? 
                  |  1 \d\d 
                  |  2 [0-4] \d 
                  |  25 [0-4] 
                )
           )
        |  (?:
                (?: [a-z\u00a1-\uffff0-9]+ -? )*
                [a-z\u00a1-\uffff0-9]+ 
           )
           (?:
                \.
                (?: [a-z\u00a1-\uffff0-9]+ -? )*
                [a-z\u00a1-\uffff0-9]+ 
           )*
           (?:
                \.
                (?: [a-z\u00a1-\uffff]{2,} )
           )
      )
   |  localhost
 )
 (?: : 5? 443 )?
 (?: / [^\s]* )?

 (?! \S )
1 голос
/ 28 апреля 2019

Вы должны добавить / после этой необязательной группы портов, чтобы она не позволяла вводить цифры до /.Попробуйте использовать это регулярное выражение,

^(https:\/\/)([a-zA-Z\d\.]{2,})\.([a-zA-Z]{2,})(:5?443)?\/\S*

Обратите внимание, я также изменил (:5{0,1}443)? на (:5?443)? и изменил последний .* на \S*, чтобы URL не захватывал пробелы как пробелы в URLне действительная вещь.Кроме того, вы также можете избавиться от стольких групп в своем регулярном выражении, если только они вам не нужны.

Демонстрация регулярных выражений

Изменить:

Как вы сказали в комментариях, что вы также хотите соответствовать следующим URL-адресам,

https://example.com
https:example.com
https:example.com:443

вам нужно сделать \/\S* часть необязательной, поместив ?после них.Модифицированное регулярное выражение становится таким, что будет соответствовать вышеуказанным URL.

^https:\/\/([a-zA-Z\d\.]{2,})\.([a-zA-Z]{2,})(:5?443)?(\/\S*)?

Демонстрация с необязательной частью filepath

0 голосов
/ 28 апреля 2019

Ваш RegEx, кажется, работает нормально.Вы можете попробовать этот RegEx и добавить дополнительные границы, просто для безопасности, если хотите:

^(https:\/\/)([a-zA-Z\d\.]{2,})\.([a-zA-Z]{2,}):(5443|443)?$

enter image description here

Я только добавил конечный символ $ , чтобы ограничить исходное выражение справа.Вы можете просто добавить несколько номеров портов, если возможно, в эту группу захвата:

(5443|443) 

Вы также можете удалить ненужные границы, если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...