подтвердить URL в форме http://www.test.com - PullRequest
1 голос
/ 23 августа 2010

Я хочу проверить URL (используя скрипт java), чтобы принять только формат - http://www.test.com. Я пытаюсь использовать следующий код, но он также принимает test.com и http://www.test.com.com.

var URLReg = new RegExp();
URLReg.compile("^[A-Za-z]+://[A-Za-z0-9-_]+\\.[A-Za-z0-9-_%&\?\/.=]+$");
if (!URLReg.test(form["URL"].value)) {
    alert("You must supply a valid URL.");
    return false;
} 

что в этом плохого?: (

Заранее спасибо.

Ответы [ 3 ]

5 голосов
/ 23 августа 2010

Если вы хотите частично придерживаться своего кода, быстрое исправление можно просто использовать:

"^((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...

Для проверки только доменная часть ( принудительно вводит 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

и это подтвердится, но теперь я устал, извините! :)

0 голосов
/ 23 августа 2010

Смотрите, если

^[A-Za-z]+:\/\/[A-Za-z0-9-/]+\.com$

это то, что вы хотите

0 голосов
/ 23 августа 2010

Я использую это выражение - это лучшее, что я нашел:

^(https?://)?(([\w!~*'().&=+$%-]+: )?[\w!~*'().&=+$%-]+@)?(([0-9]{1,3}\.){3}[0-9]{1,3}|([\w!~*'()-]+\.)*
([\w^-][\w-]{0,61})?[\w]\.[a-z]{2,6})(:[0-9]{1,4})?((/*)|(/+[\w!~*'().;?:
@&=+$,%#-]+)+/*)$
...