我正在使用一个Angular应用程序,该应用程序的页面可以列出候选人,查看有关候选人的一些信息,然后单击将您导航到候选人网页的链接。
我无法控制应聘者设置其URL的方式,我只能在FE上过滤无效的URL。并且无需检查URL在BE端是否有效。因此,我想出了一个函数来检查它,如果不正确,请将URL设置为undefined
。
我正在使用此REGEX:
/^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/gm
这是函数:
private processUrl(url: string): string {
console.log('URL:', url, 'Correct:', URL_REGEX.test(url));
console.log('URL result:', URL_REGEX.test(url) ? url : undefined);
return URL_REGEX.test(url) ? url : undefined;
}
这就是乐趣的开始。某些URL即使正确无误也被视为错误,当您重新加载页面时,结果将更改。为了使它更令人迷惑,console.log
中的第一次REGEX检查会将URL视为错误,而将第二次视为正确。这是日志:(不要单击链接,您会被非洲滚动或翻滚)
Run 1 - init
Array(3) [ {…}, {…}, {…} ]
URL: https://www.youtube.com/watch?v=DLzxrzFCyOs Correct: true
URL result: undefined
URL: https://www.youtube.com/watch?v=VG0gwh8jwB0 Correct: false
URL result: https://www.youtube.com/watch?v=VG0gwh8jwB0
URL: blabla Correct: false
URL result: undefined
Run 2 - refresh
Array(3) [ {…}, {…}, {…} ]
URL: https://www.youtube.com/watch?v=DLzxrzFCyOs Correct: false
URL result: https://www.youtube.com/watch?v=DLzxrzFCyOs
URL: https://www.youtube.com/watch?v=VG0gwh8jwB0 Correct: true
URL result: undefined
URL: blabla Correct: false
URL result: undefined
看起来REGEX本身没有问题,但打字稿行为异常。我以数组形式接收候选人列表,因此我想可以排除异步问题。在函数中没有console.log()
的情况下会发生此问题,输出是相同的。