我需要创建一个正则表达式来验证URL。

31 浏览
0 Comments

我需要创建一个正则表达式来验证URL。

isURL中的正则表达式并不能适用于所有情况。

错误的负向匹配(错误地返回false):

https://link.springer.com/article/10.1057/s41303-017-0039-0
https://www.academia.edu/12962582/Embodiment_Semiosis._Violi_P

错误的正向匹配(错误地返回true):

3.5/5

创建一个正则表达式,对以下URL返回true:

http://nonssl.com

localhost:3000/
nohttp.com
withslash.com/
sub.domain.com
withpath.com/a/b

并对以下URL返回false:

例如:

3.5/5

我目前的正则表达式 =

/^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w-]+)+[\w\-_~:/?#[\]\@!\$&'\(\)\*\+,;=]+$/i

此外,我找到了这个正则表达式 =

^((ftp|http|https)://)?(www.)??(?!.(ftp|http|https|www.))??[a-zA-Z0-9_-]+

(.[a-zA-Z]+)+((/)[\w#]+)(/\w+\?[a-zA-Z0-9_]+=\w+(&[a-zA-Z0-9_]+=\w+)*)?$

但它除了localhost:3000和http://localhost:3000/之外接受任何内容。

0
0 Comments

在上述代码中,出现了需要创建正则表达式(RegExp)来验证URL的问题。问题的解决方法是使用JavaScript中的URL对象和条件语句来验证URL的正确性。

首先,代码中给出了一系列URL的示例,这些示例包括不同情况下的URL,如带有端口号、不带协议、不带路径等。然后,通过使用split("\n")将这些示例分割成一个字符串数组。

接下来,通过forEach循环遍历数组中的每个URL示例。在循环中,使用条件语句判断URL是否带有协议(以"http"开头)。如果URL带有协议,则直接使用URL对象来创建一个新的URL实例;如果URL不带协议,则在URL前面添加"http://"后再创建URL实例。

然后,通过条件语句将URL示例分割为主机名和路径部分。如果URL示例中包含端口号,则输出"port found"和主机名、端口号以及判断主机名是否与合并后的主机名和端口号相等的结果。如果URL示例中不包含端口号,则输出主机名和判断主机名是否相等的结果。

通过以上步骤,我们可以使用URL对象和条件语句来验证URL的正确性。

以下是整理后的文章:

在上述代码中,我们面临着一个需要创建正则表达式(RegExp)来验证URL的问题。为了解决这个问题,我们可以使用JavaScript中的URL对象和条件语句来验证URL的正确性。

首先,代码给出了一系列URL的示例,这些示例包括不同情况下的URL,如带有端口号、不带协议、不带路径等。然后,通过使用split("\n")将这些示例分割成一个字符串数组。

接下来,通过forEach循环遍历数组中的每个URL示例。在循环中,使用条件语句判断URL是否带有协议(以"http"开头)。如果URL带有协议,则直接使用URL对象来创建一个新的URL实例;如果URL不带协议,则在URL前面添加"http://"后再创建URL实例。

然后,通过条件语句将URL示例分割为主机名和路径部分。如果URL示例中包含端口号,则输出"port found"和主机名、端口号以及判断主机名是否与合并后的主机名和端口号相等的结果。如果URL示例中不包含端口号,则输出主机名和判断主机名是否相等的结果。

通过以上步骤,我们可以使用URL对象和条件语句来验证URL的正确性。

0