43

私はこれに対する答えをあちこち探してきましたが、見つけた答えはすべてJavaScriptに含まれていませんでした。

文字列がhttp、https、またはftpで始まるかどうかをJavaScriptで確認する方法が必要です。それらのいずれかで始まらない場合は、文字列の前に。を付ける必要がありますhttp://。indexOfは私には機能しません。http、https、またはftpのいずれかが必要なので、私は思いません。またgoogle.com/?q=http://google.com、httpで始まらないので、それを有効としてトリガーするようなものは必要ありませんが、indexOfはそれを真としてトリガーします(私が完全に間違っていない場合)。

私が見つけた最も近いPHP正規表現はこれです:

function addhttp($url) {
   if (!preg_match("~^(?:f|ht)tps?://~i", $url)) {
      $url = "http://" . $url;
   }
   return $url;
}

出典:URLにhttpが存在しない場合にhttpを追加する方法

それをjavascriptに変換する方法がわかりません。どんな助けでも大歓迎です。

4

6 に答える 6

107
export const getValidUrl = (url = "") => {
    let newUrl = window.decodeURIComponent(url);
    newUrl = newUrl.trim().replace(/\s/g, "");

    if(/^(:\/\/)/.test(newUrl)){
        return `http${newUrl}`;
    }
    if(!/^(f|ht)tps?:\/\//i.test(newUrl)){
        return `http://${newUrl}`;
    }

    return newUrl;
};

テスト:

expect(getValidUrl('https://www.test.com')).toBe('https://www.test.com');
expect(getValidUrl('http://www.test.com')).toBe('http://www.test.com');
expect(getValidUrl('    http   :    /  /  www.test.com')).toBe('http://www.test.com');
expect(getValidUrl('ftp://www.test.com')).toBe('ftp://www.test.com');
expect(getValidUrl('www.test.com')).toBe('http://www.test.com');
expect(getValidUrl('://www.test.com')).toBe('http://www.test.com');
expect(getValidUrl('http%3A%2F%2Fwww.test.com')).toBe('http://www.test.com');
expect(getValidUrl('www    .  test.com')).toBe('http://www.test.com');
于 2012-07-02T20:51:20.383 に答える
39

これは機能するはずです:

var pattern = /^((http|https|ftp):\/\/)/;

if(!pattern.test(url)) {
    url = "http://" + url;
}

jsFiddle

于 2012-07-02T20:50:10.223 に答える
19
var url = "http://something.com"
if( url.indexOf("http") == 0 ) {
    alert("yeah!");
} else {
    alert("No no no!");
}
于 2012-07-02T20:50:21.150 に答える
3

これは機能するはずです:

var re = /^(http|https|ftp)/
于 2012-07-02T20:49:36.650 に答える
3

以前の回答をもう少し洗練new RegExp(...)して、厄介なエスケープを回避するために使用し、オプションのを追加しましたs

var pattern = new RegExp('^(https?|ftp)://');

if(!pattern.test(url)) {
    url = "http://" + url;
}

var pattern = new RegExp('^(https?|ftp)://');


console.log(pattern.test('http://foo'));
console.log(pattern.test('https://foo'));
console.log(pattern.test('ftp://foo'));
console.log(pattern.test('bar'));

于 2019-07-17T14:06:30.513 に答える
3

非正規表現の宣言型の方法:

const hasValidUrlProtocol = (url = '') => 
    ['http://', 'https://', 'ftp://'].some(protocol => url.startsWith(protocol))
于 2020-05-12T08:46:13.363 に答える