regex - URL验证正则表达式在打字稿中给出错误
问题描述
我正在尝试在打字稿中验证 URL,但是每当在 UI 中加载输入文件时,我都会遇到以下错误。
ERROR SyntaxError: Invalid regular expression: /^((https|http|ftp|smtp)://)?(www.)?[a-z0-9]+(.[a-z]{2,}){1,3}(#?/?[a-zA-Z0-9#]+)*/?(?[a-zA-Z0-9-_]+=[a-zA-Z0-9-%]+&?)?$/: Invalid group
at new RegExp (<anonymous>)
at Function.pattern (forms.js:1372)
at SystemSettingsComponent.changeKeys (system-settings.component.ts:133)
at Object.eval [as handleEvent] (SystemSettingsComponent.html:37)
at handleEvent (core.js:43993)
at callWithDebugContext (core.js:45632)
at Object.debugHandleEvent [as handleEvent] (core.js:45247)
at dispatchEvent (core.js:29804)
at core.js:42925
at HTMLSelectElement.<anonymous> (platform-browser.js:2668)
我正在使用的正则表达式如下
^((https|http|ftp|smtp):\/\/)?(www.)?[a-z0-9]+(\.[a-z]{2,}){1,3}(#?\/?[a-zA-Z0-9#]+)*\/?(\?[a-zA-Z0-9-_]+=[a-zA-Z0-9-%]+&?)?$
我尝试了许多不同的正则表达式,但在每个用于 URL 验证的正则表达式中我都面临同样的问题。
测试 URL 参数是:
http://www.testdomain.site.com
https://www.testdomain.site.com
domain.testsite.com
http://www.testsite.com/path/to/dir/
https://www.testsite.com/path/to/dir/
解决方案
尝试
^((https|http|ftp|smtp):\/\/)?(www.)?[a-z0-9]+(.[a-z]{2,}){1,3}(#?\/?[a-zA-Z0-9#]+)*\/?(?:[a-zA-Z0-9-_]+=[a-zA-Z0-9-%]+&?)?$
/
您至少在错误中显示的正则表达式中有未转义的字符,并且:
旁边缺少?
,这只是建议,但这会将其转换为非捕获组
这与打字稿无关,因为错误表明问题来自无效的正则表达式。