我应该如何调整regex以验证url接受#?

时间:2015-01-18 11:10:39

标签: regex

我有这个正则表达式验证网址:

 $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,

问题是#,我应该如何做到这一点?

1 个答案:

答案 0 :(得分:1)

在正则表达式的port and path部分中,将字符类[-a-z\d%_.~+]更改为[-a-z\d%_.~+#]

请注意,这也会匹配http://coding-academy.org/####/contact###。如果您不想这样做,请将(\/[-a-z\d%_.~+]*)*位更改为(\/[-a-z\d%_.~+]*|\/#)*