我有这个正则表达式验证网址:
$scope.validUrl = function(str){
var pattern = new RegExp('^(https?:\\/\\/)?'+ // protocol
'((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|'+ // domain name
'((\\d{1,3}\\.){3}\\d{1,3}))'+ // OR ip (v4) address
'(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*'+ // port and path
'(\\?[;&a-z\\d%_.~+=-]*)?'+ // query string
'(\\#[-a-z\\d_]*)?$','i'); // fragment locator
if(!pattern.test(str)) {
return false;
} else {
return true;
}
};
我想用它来验证这个网址:
http://coding-academy.org/#/contact
如果我将此url应用于该函数,则返回false,
问题是#,我应该如何做到这一点?
答案 0 :(得分:1)
在正则表达式的port and path
部分中,将字符类[-a-z\d%_.~+]
更改为[-a-z\d%_.~+#]
。
请注意,这也会匹配http://coding-academy.org/####/contact###
。如果您不想这样做,请将(\/[-a-z\d%_.~+]*)*
位更改为(\/[-a-z\d%_.~+]*|\/#)*
。