Если вы хотите частично придерживаться своего кода, быстрое исправление можно просто использовать:
"^((https?\\://www\\.)|(www\\.))[A-Za-z0-9_\\-]+\\.[A-Za-z0-9_\\-\\%\\&\\?\\.\\=\\+]+$"
(принимает "http://www...." и" www ... ")
или
"^(https?\\://www\\.)[A-Za-z0-9_\\-]+\\.[A-Za-z0-9_\\-\\%\\&\\?\\.\\=\\+]+$"
(принимает только "http://www...." и НЕ" www ... ")
Ни один из вышеперечисленных не принимает домен без "www".
В любом случае, ваш код (а также скорректированный код, который я разместил выше) НЕПРАВИЛЬНЫЙ, потому что они оба подтвердят правильность доменов, подобных этим:
Ваше регулярное выражение также примет дерьмо, как это:
Для проверки только доменная часть ( принудительно вводит www ), вы можете использовать это:
var URLReg = /^((https?\://wwww\.)|(www\.))([a-z0-9]([a-z0-9]|(\-[a-z0-9]))*\.)+[a-z]+$/i;
Этот не будет проверять нормально дерьмо, как:
Кстати: это также подтвердит http://www.domain.com.com, но это не ошибка, так как URL субдомена может выглядеть так: http://www.subdomain.domain.com, и это действительно!
И почти невозможно (или, по крайней мере, не существует) простого способа проверить правильность домена tld с помощью регулярного выражения, потому что вам нужно будет записать встроенное в ваше регулярное выражение все возможные доменные значения tlds ОДИН ПО ОДНОМУ вот так:
var URLReg = /^((https?\://wwww\.)|(www\.))([a-z0-9]([a-z0-9]|(\-[a-z0-9]))*\.)+(com|it|net|uk|de)$/i;
(этот последний, например, будет проверять только домен, заканчивающийся на .com / .net / .de / .it / .co.uk)
Новые tlds всегда выходят , так что вам придется корректировать каждое регулярное выражение, выходящее новое tld, это странно!
Чтобы проверить также оставшуюся часть URL, вы можете добавить оставшуюся часть в конце регулярного выражения:
var URLReg = /^((https?\://wwww\.)|(www\.))([a-z0-9]([a-z0-9]|(\-[a-z0-9]))*\.)+[a-z]+(\/[a-z0-9_\-\%\&\?\.\=\+]*)*$/i
;
Это все еще не идеально, потому что кто-то может войти:
http://www.domain.com/????hello
и это подтвердится, но теперь я устал, извините! :)