我已经找到了很多关于这个主题的帖子,但是没有帖子处理我的特定问题。
这是我使用的正则表达式(在此网站上找到):
function validateUrl(value){
return /[-a-zA-Z0-9@:%._+~#=]{2,256}.[a-z]{2,6}([-a-zA-Z0-9@:%_+.~#?&//=]*)/i.test(value);
}
这将验证我的 url 是否正确,直到以下一点:
mydomain.tld/mypage/this'go(es{wro[ng
我的函数返回 true,即使存在不允许的字符,例如:'
或"
或(
或)
或[
或]
或{
或}
我不明白为什么允许这样做。我有这个:[-a-zA-Z0-9@:%_+.~#?&//=]
在我看来应该返回"false
"...
您的正则表达式几乎可以工作。在字符串mydomain.tld/mypage/this'go(es{wro[ng
中,它与 mydomain.tld/mypage/this
匹配。由于您没有在两端放置锚点,因此它确实匹配(部分匹配)。
只需将其更改为:
^[-a-zA-Z0-9@:%._+~#=]{2,256}.[a-z]{2,6}([-a-zA-Z0-9@:%_+.~#?&//=]*)$
^ ^
观看现场演示
请尝试以下操作:
function validateUrl(value){
return /^(http(s)?://)?(www.)?[a-z0-9]+([-.]{1}[a-z0-9]+)*.[a-z]{2,5}(:[0-9]{1,5})?(/.*)?$/.test(value);
}