Для Objective C:
программирование какао для MAC OSX - третий выпуск Aaron Hillegass, опубликованный Addison Wesley
программирование в Objective C, Stephen G Kochan,
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'
)
Это - вызывающе не самый эффективный подход, но это читаемо и легко сформироваться к тому, в чем Вы нуждаетесь. И легче добавить 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);
});
});
});