【问题标题】:Using javascript regex containing '@' in razor在剃须刀中使用包含“@”的javascript正则表达式
【发布时间】:2013-10-26 18:50:57
【问题描述】:

我在 razor 视图页面中使用 javascript 执行电子邮件地址验证。 我要使用的正则表达式类似于Validate email address in JavaScript? 提出的正则表达式

但是,由于正则表达式包含“@”字符,因此在尝试运行 Web 应用程序时出现解析器错误。

我的正则表达式看起来像

/^...otherpart @* ... other part$/

我尝试添加一个“@”字符以使原始正则表达式中的 ...@@* ...,这消除了编译错误,但似乎使正则表达式停止工作。 (我们在另一个不使用 razor 引擎的网络应用中使用过它,所以我知道它可以工作)。

还有其他方法可以转义“@”字符吗?

【问题讨论】:

  • 你试过用<text><script>...</script></text>包装你的脚本块吗?
  • @Jasen 我还没有尝试过 技巧。明天试试,结果告诉你。
  • 如果您在多个地方使用此脚本,最好将其放在它自己的 .js 文件中。单个验证规则,例如 max/min,可以放在元素的 data- 属性中并通过 jQuery 读取。
  • @Jasen,@jfankcarr。我听取了您的建议并使用了一个单独的文件,现在一切正常。谢谢!

标签: javascript regex asp.net-mvc asp.net-mvc-4 razor


【解决方案1】:

您可以在其前面添加另一个@ 以逃避@@,尝试省略量词*。如果这似乎不起作用,则在函数周围添加<text></text>,它会告诉 Razor 不解析内容。或者,您可以将 Javascript 放在单独的文件中以满足您的需求。

如果由于某种原因您的字符串中有多个 @@,请将代码块放在前面 @:@@

【讨论】:

  • 我已经尝试了一些事情...<text> 并以@: 开头,但似乎只有@@ 可以解决问题。另一种选择是使用单独的文件。
  • 我倾向于将所有这些放入一个单独的文件中,而不是编写一个时髦的正则表达式模式来满足 Razor 解析器。有时,如果不考虑转义字符,就很难理解正则表达式模式。
【解决方案2】:

将以下内容放在正则表达式中而不是 @:

@('@')

以上内容将被渲染为单个@。

你的例子会变成:

/^...otherpart @('@')* ... other part$/

【讨论】:

  • 这应该是公认的答案!将@@ 加倍会更改您的正则表达式,这不是您想要的。不过,我希望有更好的方法来避免剃刀中的@符号,比如 \@
【解决方案3】:

只需使用双精度@@
它对我有用,我认为这是唯一的方法。

【讨论】:

    【解决方案4】:

    最好使用@('@') 而不是@@(不适合我)。 示例

    <input class="form-control" pattern="^[a-zA-Z@('@')]{5,20}$"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-13
      • 2012-01-04
      相关资源
      最近更新 更多