Я пытаюсь проверить текстовое поле, чтобы убедиться, что URL-адрес написан внутри (минус часть «http: //»). Вот мой код:javascript регулярное выражение не работает
var isUrl;
var regex = new RegExp("^(?!http)(www\.)?(([a-z])+\.[a-z]{2,}(\.[a-z]{2,})?)");
var siteUrl = e.target.value;
if (siteUrl.match(regex)) {
isUrl = true;
}
else {
isUrl = false;
}
Так мое регулярное выражение ^(?!http)(www\.)?(([a-z])+\.[a-z]{2,}(\.[a-z]{2,})?)
. я был под впечатлением, что это будет сделать следующее:
- ничего не совпадают, начиная с
http
.. который он делает правильно - Разрешить дополнительный
www.
в начале - Принимать 1 или более символы из az, которые нужно ввести в
- Принять точку после этих символов
- Принять 2 или более символов, следующих за точкой, и
- Разрешить дополнительную точку, за которой следуют два или более символов.
На практике текстовое поле принимает строки типа "ashdiguasdf" и "aksjdnfa :: // ', ~", которые он не должен делать. Может ли кто-нибудь объяснить, почему?
Используйте литерал регулярного выражения или двойной escape с помощью конструктора. Кроме того, вам не нужен отрицательный Lookahead, если вы привязываете свой шаблон, вы можете опустить эту часть и убедиться, что вы используете конец строки '$' anchor. – hwnd
I.e. используйте 'var regex = /^(?!http)(www\.)?(([az])+\.[az]{2,}(\.[az]{2,})?)/i; '(Я думаю, что здесь требуется нечувствительность к регистру, поэтому я добавил'/i'). –
Это для очень специфических URL-адресов? Не разрешены ли URL-адреса без цифр? Проверьте это: URL-адрес повторно является более сложным, чем ожидалось: http://stackoverflow.com/questions/161738/what-is-the-best-regular-expression-to-check-if-a-string-is-a -valid-url –