在javascript中使用括号验证URL
全部- 我正在使用下面的代码(在线获取)验证URL。然而,URL“http://www.yahoo.com?srch=news1&Network=[cnn]“由于URL变量网络中的括号,无法返回true。是否可以更新正则表达式以包含括号,或者我应该循环URL变量并删除括号在javascript中使用括号验证URL,javascript,regex,Javascript,Regex,全部- 我正在使用下面的代码(在线获取)验证URL。然而,URL“http://www.yahoo.com?srch=news1&Network=[cnn]“由于URL变量网络中的括号,无法返回true。是否可以更新正则表达式以包含括号,或者我应该循环URL变量并删除括号 var webSiteUrlExp = /^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]
var webSiteUrlExp = /^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/;
if (webSiteUrlExp.test(url)) {
console.log("true");
return true;
}
else {
console.log("false");
return false;
}
这是因为
[
和]
在URL中不是有效字符。浏览器将自动将其转换为分别为
%5B
和%5D
,服务器将在将其传递给引擎之前将其静默转换回
如果要验证字符超出正常范围的URL,应首先通过某种转义函数运行它。这是因为
[
和]
不是URL中的有效字符。浏览器将自动将其转换为分别为
%5B
和%5D
,服务器将在将其传递给引擎之前将其静默转换回
如果要验证字符超出正常范围的URL,应首先通过某种转义函数运行它。更好的解决方案是在正则表达式中包含方括号。在正则表达式末尾的“?”后面添加“([.])*”是否有帮助?可能相关:您在哪里找到此正则表达式?匹配十六进制数字的部件中存在严重错误:
[a-fA-f\d]
应为[a-fA-f\d]
。更好的是,您可以将其缩短为[a-f\d]
,并设置不区分大小写的标志。更好的解决方案是在正则表达式中包含方括号。不要在正则表达式末尾的“?”后面添加“([.])*”有帮助吗?可能相关:您在哪里找到此正则表达式?匹配十六进制数字的部件中存在严重错误:[a-fA-f\d]
应为[a-fA-f\d]
。更好的是,您可以将其缩短为[a-f\d]
,并设置不区分大小写的标志。迂腐的说明:根据RFC3986;,它们不是无效的,而是“保留的”)谢谢,我将尝试更新代码以转义字符。我更新代码以转义URL中的括号,但似乎不起作用。这里是指向JSFIDLE Pedantic的链接:根据RFC3986;,它们不是无效的,而是“保留的”。)谢谢,我将尝试更新代码以转义字符。我更新代码以转义URL中的括号,但似乎不起作用。这里是指向JSFIDLE的链接