打字稿中的URL验证

时间:2017-09-15 12:35:17

标签: regex angular typescript url syntax

我想创建一个自定义验证器,它应该检查输入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地址 以下网址应该有效:

以下网址应无效:

请帮助

2 个答案:

答案 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>之类。当然,您应该修改方法的名称。