#javascript #regex
Вопрос:
Мне нужно проверить URL-адрес, введенный на странице, и его соответствие только строке http://. Я хочу, чтобы он потерпел неудачу, если пользователь только войдет http://
Шаблон регулярного выражения ^(https?://)(www.)?(([a-zA-Z] )?(.[a-zA-z]{2,6})?)((d{1,3}.){3}(d{1,3}){1})?$/gm
тесты:
google.com <---- fails as it should
https://google.com <---- Pass
https:google.com <---- fails as it should
www.cool.com.au <---- fails as it should
https://asdsds.Com
http://a <---- Pass
https:// <---- Pass **BUT SHOULD FAIL**
http://10.10.10.00 <---- Pass
http://www.cool.com <---- Pass
https://123123.asd <---- fails as it should
http://www.cool.com.au/ersdfs <---- fails as it should
http://www.cool.com.au/ersdfs?dfd=dfgd@s=1 <---- fails as it should
http://www.cool.com:81/index.html <---- fails as it should
Ответ №1:
Главное здесь-добавить (?!$)
после ^(https?://)
, это не приведет к совпадению, если сразу после части протокола будет конец строки/строки.
Вы можете использовать
^(?:https?://)(?!$)(?:www.)?[a-zA-Z]*(?:.[a-zA-Z]{2,6})?(?:(?:d{1,3}.){3}d{1,3})?$
Смотрите демонстрацию регулярных выражений.
Обратите {1}
внимание, что это избыточно и нуждается в удалении. [a-zA-z]
(это не соответствует только буквам), скорее всего, это опечатка, вы, должно быть, имели в виду [a-zA-Z]
.
Я удалил ненужные группы захвата и преобразовал группы захвата в группы без захвата, чтобы получить более чистую структуру соответствия регулярных выражений, используйте механизм захвата только тогда, когда вам действительно нужно получить части соответствия.