MVC razor和JQuery的URL验证问题
我正在开发MVC Razor。我面临一个验证URL验证的问题 我需要在插入临时数据库之前进行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\-_]+)
(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编码过一次了。回答时要有很好的解释,非常感谢