2017-09-08 6 views
0

送信されたURLがhttpまたはwwwで始まっているかどうかを確認しようとしていますが、次のregexpは常にtrueを返します。httpまたはwwwと一致する正規表現

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

したがって、validUrlは入力した入力と同じになりますか? –

+0

ところで、 '' www''はプロトコルではなく、ドメインWebページの一般的な接頭辞ですが、これはかなり時代遅れであり、落胆さえあります。それから始まるURLには何も特別なことは起こりません。 – Pac0

答えて

4

私はここで個人的に正規表現を使用しませんが、それは不要です。

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

は(限り、あなたは.startsWith用ポリフィルを持っているとして)正常に動作します。これを追加するには、

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

この例の式は、有効なプロトコルが存在するかどうかを確認するだけではわかりません。より簡単な表現で十分です:

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

を使用すると、全体的な構造(例えば、有効な接尾辞が存在している必要があります)を検証する必要がある場合、あなたは、現在追加されて意図しない'http://'につながること別にそれを行う必要があり、場合たとえば'.com'がありませんでした。

関連する問題