正则表达式匹配http或www

时间:2017-09-08 13:45:32

标签: javascript regex

我试图检查发送的URL是以http还是www开头,以下regexp始终返回true。

function checkFormat(url){
    var validUrl='';
    const regExp= new RegExp(/^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/);
    if(regExp.test(url)){
        validUrl= url;
    }
    else{
        validUrl= 'http://'+url;
    }
    console.log(validUrl);
    return validUrl;
}

例如,如果我发送test.com,validUrl将是test.com。 如果我发送http://test.com,则validUrl将为http://test.com

我做错了什么?

2 个答案:

答案 0 :(得分:4)

我个人不会在这里使用正则表达式,这是不必要的。

if ( url.startsWith("http://") || url.startsWith("www" ) {

可以正常工作(只要你有.startsWith的polyfill)。要添加它,请执行

const validUrl = url.startsWith("http://") ? url : `http://${url}`;

答案 1 :(得分:0)

您的示例中的表达式比您需要的更简单,只需确定是否存在有效的协议。一个更简单的表达式就足够了:

if (!/^http(s?):\/\//.test(url)) {
   url = 'http://' + url;
}

如果您需要验证整体结构(例如,必须存在有效​​后缀),那么您应该单独执行此操作,否则会导致意外'http://'被追加,例如'.com'失踪了。