2016-01-22 4 views
1

Я уже нашел много сообщений на эту тему, однако никакая почта не обрабатывает мою конкретную проблему.javascript RegExp validate url expression

Это регулярное выражение, которое я использую (находится на этом сайте):

function validateUrl(value){ 
     return /[[email protected]:%._\+~#=]{2,256}\.[a-z]{2,6}([[email protected]:%_\+.~#?&//=]*)/i.test(value); 
} 

Это проверяет мой URL правильно до до следующего пункта:

mydomain.tld/MyPage/это «идти (а {сонате [нг

Моя функция возвращает истину, даже если не разрешенные символы, такие как:
' или " или ( или ) или [ или ] или { или }

Я не понимаю, почему это разрешено. У меня есть это: [[email protected]:%_\+.~#?&//=]
Если вернуться 'false' на моем взгляде ...

+0

Я не смотрел на нее внимательно, но мое первоначальное предположение, что это только соответствие часть входных данных, но регулярное выражение еще считает частичное совпадение. Чтобы заставить его проверять всю строку ввода, вам нужно использовать привязки '^' и '$'. –

+0

@StevenDoggart, который звучит как ответ, не так ли? –

+0

@ Томас Правда, но я не хотел тратить время, чтобы убедиться, что моя догадка верна. Я достаточно доволен, чтобы Atif получил очки, если это действительно ответ :) –

ответ

2

Вашего регулярное выражение почти работает. В строке mydomain.tld/mypage/this'go(es{wro[ng соответствует mydomain.tld/mypage/this. Поскольку вы не поставили якоря в обоих концах, он соответствует (partially).

Просто измените его:

^[[email protected]:%._\+~#=]{2,256}\.[a-z]{2,6}([[email protected]:%_\+.~#?&\/\/=]*)$ 
^                  ^

См LiveDemo

+0

Это работает идеально для меня! – user2795648

0

Пожалуйста, попробуйте следующее:

function validateUrl(value){ 
     return /^(http(s)?:\/\/)?(www\.)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/.test(value); 
} 
+2

Объясняя, почему исходная версия не работает должным образом, было бы здорово, так что OP понимает эту проблему. – Lucero