URL-адрес регулярного приложения Javascript для домена или ip-адреса

#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] .

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