2012-01-31 82 views
0

我正在使用MVC Razor。我面临一个问题来验证URL验证。URL验证问题MVC剃刀和JQuery

我需要在插入临时数据库之前进行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\-\@@?^=%&/~\+#])? 

ie

@@而不是@

当它运行,如果我看到控制台,我得到了原来的一个,所以我认为这是好的,我做的 @@代替@

但在控制台我得到一个错误

enter image description here

谁能告诉我什么是错,所以得到了错误,

“无效的范围字符类”来解决这个

+0

不是这样的答案,但这两个”&“实际上不应该是”&“,而只是”&“ - 它们经常被HTML编码一次您从中获得正则表达式的网站。 – JimmiTh 2012-01-31 09:48:08

回答

2

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

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

如果创建一个使用正则表达式的表达式(),你必须在每一个地方\时使用\\

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

更新/解释

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

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

但 “W” 其实出自 “_”(看一个ASCII/UTF-8字符表),这意味着它在字符类( “字符类”=“的无效范围收集的字符匹配“)

+0

回答很好的解释,非常感谢 – 2012-01-31 10:17:18