MVC razor和JQuery的URL验证问题

MVC razor和JQuery的URL验证问题,jquery,asp.net-mvc,razor,asp.net-mvc-routing,Jquery,Asp.net Mvc,Razor,Asp.net Mvc Routing,我正在开发MVC Razor。我面临一个验证URL验证的问题 我需要在插入临时数据库之前进行URL验证 我得到了一份推荐信 找到了一个很好的验证模式 (http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])? 当我在MVC视图中工作时,它会给我错误,所以我必须将其更改为 (http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)

我正在开发MVC Razor。我面临一个验证URL验证的问题

我需要在插入临时数据库之前进行URL验证

我得到了一份推荐信

找到了一个很好的验证模式

(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?
当我在MVC视图中工作时,它会给我错误,所以我必须将其更改为

(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@@?^=%&:/~\+#]*[\w\-\@@?^=%&/~\+#])?
i、 e

@
而不是
@

当它运行时,如果我看到控制台,我得到了原来的一个,所以我认为我可以这样做
@
而不是
@

但在控制台中,我犯了一个错误

谁能告诉我这是怎么回事,所以我犯了错误


“字符类中的无效范围”

解决此问题的最简单方法:在javascript验证器中,删除
new RegExp()
以及引号,并在开头和结尾添加斜杠,指示正则表达式文字。因为正则表达式位于字符串中,“\”被解释为字符串转义,而不是正则表达式转义,本质上意味着所有“\”都将被删除。通过不使用字符串,而是使用javascript正则表达式文字来避免这种情况:

var urlregex = /(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/;
如果使用RegExp()创建表达式,则必须在发生
\
的每个位置使用
\

如注释中所述,替换两个
&&
(在您从中获取正则表达式的服务器上进行双重HTML编码)。它们在正则表达式语法中没有错,但它们确实使表达式允许
,这在URL中是不允许的

更新/解释

错误的实际含义是,由于javascript在创建最终正则表达式时忽略了字符串中的所有反斜杠,因此它会变成:

/(http|ftp|https)://[w-_]+(.[w-_]+)+([w-.,@?^=%&:/~+#]*[w-@?^=%&/~+#])?/
  • 原始的
    [\w\-\u]
    表示“匹配任何单词(字母数字)字符、连字符或下划线”
  • [w-\uz]
    表示“匹配“w”和“\ux”之间的任何字符”

但是“w”实际上在“uu”(查看ASCII/UTF-8字符表)之后,这意味着它在字符类(“字符类”=“要匹配的字符集合”)中是无效的范围。

不是答案本身,而是这两个“&;“实际上不应该是”&;,但只是“&”-你从网站上获得正则表达式的时候,它们已经被HTML编码过一次了。回答时要有很好的解释,非常感谢