URL验证MVC razor和JQuery的问题

时间:2012-01-31 08:45:31

标签: jquery asp.net-mvc razor asp.net-mvc-routing

我正在研究MVC Razor。我面临验证URL验证的问题。

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

我得到了http://www.regxlib.com/Search.aspx?k=&c=2&m=-1&ps=20

的引用

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

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

当我在MVC视图中工作时,它给了我错误,所以我将其更改为

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

即。

@@代替@

当它运行时,如果我看到控制台,我得到了原来的,所以我觉得我可以做 @@代替@

但在控制台中我收到了错误

enter image description here

任何人都可以告诉我这有什么问题,所以得到了错误,

“字符类中的无效范围”

1 个答案:

答案 0 :(得分:2)

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

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

如果使用RegExp()创建表达式,则必须在\\的每个位置使用\

如评论中所述,将&替换为&(在获得正则表达式的服务器上使用双重HTML编码)。它们在Regex语法中没有错,但它们确实使表达式允许;,这在URL中是不允许的。

<强>更新/解释

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

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

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