Это регулярное выражение:
^ ((HTTPS | FTP) \: (\ / \ /) | (файл \: \ / {2,3}))? (((25 [0-5] | 2 [0-4] [0- 9] |?. [01] [0-9] [0-9]) \) {3}
(25 [0-5] | 2 [0-4] [0-9] | [01] [0-9] [0-9]?)) | (((([A-Za-Z0-9 ] +) (\.)?) +?) (\.) ([AZ] {2}
| Ком | орг | чистые | г | млн | бизнес | информация | моби | имя | аэро | работа |? Музей)) ([? A-Za-Z0-9 \ \ = \ & \% \ /] *) $
Отформатировано для удобства чтения:
^( # Begin regex / begin address clause
(https?|ftp)\:(\/\/)|(file\:\/{2,3}))? # protocol
( # container for two address formats, more to come later
((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) # match IP addresses
)|( # delimiter for address formats
((([a-zA-Z0-9]+)(\.)?)+?) # match domains and any number of subdomains
(\.) #dot for .com
([a-z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum) #TLD clause
) # end address clause
([a-zA-Z0-9\?\=\&\%\/]*)? # querystring support, will pretty this up later
$
соответствует:
www.google
и не должно быть. Это один из моих "неудачных" тестов. Я объявил часть URL TLD обязательной при сопоставлении по альфа-адресу, а не по IP-адресу, и "google" не вписывается в предложение "[a-z] {2}".
Имейте в виду, что я буду устранять следующие проблемы отдельно - этот вопрос о том, почему он соответствует www.google и не должен.
- Строка запроса должна поддерживать только правильные форматы, в настоящее время принимает любую комбинацию символов строки запроса
- Некоторые протоколы не поддерживаются, хотя в мои требования они могут не входить
- необычные TLD с 3 символами, не включенными
- Возможно, соответствует http://www.google. .com - проверяет наличие последовательных точек
- Не поддерживает десятичные форматы IP-адресов
Что не так с моим регулярным выражением?
edit: См. Также предыдущую проблему с более ранней версией этого регулярного выражения в другом тестовом примере:
Как мне правильно настроить регулярное выражение?
edit2: Исправлено - исправлено регулярное выражение (как было предложено):
^ ((HTTPS | FTP) \: (\ / \ /) | (файл \: \ / {2,3}))? (((25 [0-5] | 2 [0-4] [0- 9] |?. [01] [0-9] [0-9]) \) {3}
(25 [0-5] | 2 [0-4] [0-9] | [01] [0-9] [0-9]?)) | (((([A-Za-Z0-9 ] +) (\)) +) (\) ([AZ] {2} |.?. ком | орг | чистые | г | млн | бизнес | информация | моби | имя | аэро | работа | музей)) ( [\ /] [\ / а-Za-z0-9 \.] *) *? ([\ /]? [\] [A-Za-Z0-9 \ = \ & \% \ /] *) ? $