我试图检查发送的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。
我做错了什么?
答案 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'
失踪了。