Проверить, является ли строка JavaScript URL-адресом

Для Objective C:

программирование какао для MAC OSX - третий выпуск Aaron Hillegass, опубликованный Addison Wesley

программирование в Objective C, Stephen G Kochan,

220
задан brasofilo 18 December 2018 в 21:05
поделиться

2 ответа

URL() конструктор возвращает ошибку, если URL не допустим.

я обрабатываю ошибку с try...catch только, чтобы знать, допустим ли URL или нет.

const isValidUrl = url => {
  try {
    new URL(url)
    return true
  } catch( err ) {
    false
  }
}

console.log(
  isValidUrl('http://www.validURL.com') ? 'valid': 'novalid'
)

console.log(
  isValidUrl('invalidURL') ? 'valid': 'novalid'
)
-1
ответ дан 23 November 2019 в 04:07
поделиться

Это - вызывающе не самый эффективный подход, но это читаемо и легко сформироваться к тому, в чем Вы нуждаетесь. И легче добавить regex/complexity отсюда. Таким образом, вот очень прагматический подход

const validFirstBits = ["ftp://", "http://", "https://", "www."];
const invalidPatterns = [" ", "//.", ".."];

export function isUrl(word) {
// less than www.1.dk
if (!word || word.length < 8) return false;

// Let's check and see, if our candidate starts with some of our valid first bits
const firstBitIsValid = validFirstBits.some(bit => word.indexOf(bit) === 0);
if (!firstBitIsValid) return false;

const hasInvalidPatterns = invalidPatterns.some(
    pattern => word.indexOf(pattern) !== -1,
);

if (hasInvalidPatterns) return false;

const dotSplit = word.split(".");
if (dotSplit.length > 1) {
    const lastBit = dotSplit.pop(); // string or undefined
    if (!lastBit) return false;
    const length = lastBit.length;
    const lastBitIsValid =
        length > 1 || (length === 1 && !isNaN(parseInt(lastBit)));
    return !!lastBitIsValid;
}

    return false;
}

ТЕСТ:

import { isUrl } from "./foo";

describe("Foo", () => {
    test("should validate correct urls correctly", function() {
        const validUrls = [
            "http://example.com",
            "http://example.com/blah",
            "http://127.0.0.1",
            "http://127.0.0.1/wow",
            "https://example.com",
            "https://example.com/blah",
            "https://127.0.0.1:1234",
            "ftp://example.com",
            "ftp://example.com/blah",
            "ftp://127.0.0.1",
            "www.example.com",
            "www.example.com/blah",
        ];

        validUrls.forEach(url => {
            expect(isUrl(url) && url).toEqual(url);
        });
    });

    test("should validate invalid urls correctly", function() {
        const inValidUrls = [
            "http:// foo.com",
            "http:/foo.com",
            "http://.foo.com",
            "http://foo..com",
            "http://.com",
            "http://foo",
            "http://foo.c",
        ];

        inValidUrls.forEach(url => {
            expect(!isUrl(url) && url).toEqual(url);
        });
    });
});
1
ответ дан 23 November 2019 в 04:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: