我想创建一个自定义验证器,它应该检查输入Url是否有效。
我想使用我在expresso中测试过的以下正则表达式,但在typescript中使用时出现无效(编译器无法解析它):
(((ht|f)tp(s?))\://)?((([a-zA-Z0-9_\-]{2,}\.)+[a-zA-Z]{2,})|((?:(?:25[0-5]|2[0-4]\d|[01]\d\d|\d?\d)(?(\.?\d)\.)){4}))(:[a-zA-Z0-9]+)?(/[a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~]*)?
以上网址检查可选http:\\\
,并验证IP地址
以下网址应该有效:
以下网址应无效:
请帮助
答案 0 :(得分:1)
在正则表达式中不会转义正斜杠/
。
Javascript 中的有效或无效在Typescript中有效或无效,反之亦然。
答案 1 :(得分:-1)
可能还有另一个选择依赖于URL
类。这个想法是尝试将字符串转换为URL
对象。如果失败,则该字符串不包含有效的URL。
public isAValidUrl(value: string): boolean {
try {
const url = new URL(value);
return isValid(url.pathname);
} catch (TypeError) {
return false;
}
}
isValid(value: URL): boolean {
// you may do further tests here, e.g. by checking url.pathname
// for certain patterns
}
或者返回布尔值,也可以返回创建的URL或null而不是布尔值,或者-如果JavaScript或TypeScript中存在布尔值,则返回Optional<URL>
之类。当然,您应该修改方法的名称。