我正在研究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\-\@@?^=%&/~\+#])?
即。
@@
代替@
当它运行时,如果我看到控制台,我得到了原来的,所以我觉得我可以做
@@
代替@
但在控制台中我收到了错误
任何人都可以告诉我这有什么问题,所以得到了错误,
“字符类中的无效范围”
答案 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”=“要匹配的字符集合”)