【问题标题】:Why does my regex work in .NET but not in Javascript?为什么我的正则表达式在 .NET 中有效,但在 Javascript 中无效?
【发布时间】:2015-02-10 06:25:39
【问题描述】:

我正在使用 asp RegularExpressionValidator 来验证 textarea 是否具有 html 或编码的 html。我需要验证器在客户端工作,因为我在页面上将 ValidateRequest 设置为 true。我的正则表达式设置为匹配任何不包含小于字符后跟字母字符或 & 符号后跟一些以分号结尾的字母字符的字符串。

^((?![<]{1}[a-z]{1}).)*$
^((?![&]{1}[a-z]+;).)*$

【问题讨论】:

  • 你为什么使用{1}?这是多余的。我不确定那是什么意思,但{x} 除非 x 为 2 或更大,否则不会做任何事情。
  • 顺便说一句,除非您只需要快速而肮脏的东西并且不担心准确性,regex is the wrong tool for validating HTML。如果这是为了重要的事情,比如防止 XSS,正则表达式不会削减它。例如,&lt; script&gt; 将通过您的模式,因为空格。请改用真正的 HTML 解析器。
  • 如果
  • &lt; script src="http://foo.bar"&gt; 是有效的 HTML。 &lt; 后面的空格无关紧要。
  • 好吧,我会的!看起来它也适用于所有 HTML 标签。谢谢,你教会了我一些新东西。我会提醒您,并非所有浏览器都符合标准,但只要您有更强大的服务器端验证,您就可以了。

标签: javascript c# html asp.net forms


【解决方案1】:

Javascript 没有单行的概念,它可以让您的句点匹配任何字符,包括换行符。您应该使用以下内容代替逗号:[\s\S]

^((?![<]{1}[a-z]{1})[\s\S])*$
^((?![&]{1}[a-z]+;)[\s\S])*$

【讨论】:

  • 谢谢。这就是我一直在寻找的答案。
猜你喜欢
  • 2012-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多