【问题标题】:Compilation error when using Regex expression with jQuery In ASP.NET MVC在 ASP.NET MVC 中使用带有 jQ​​uery 的 Regex 表达式时出现编译错误
【发布时间】:2013-12-11 18:29:24
【问题描述】:

我尝试使用 jQuery 在 asp.net mvc 中验证如下电子邮件,如下所示

<script type="text/javascript">
   function validateEmail(sEmail) {
    var filter = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
    if (filter.test(sEmail)) {
        return true;
    }
    else {
        return false;
    }
      $(document).ready(function() {
   $('#create').click(function() {
        var sEmail = $('#UserName').val();
        if ($.trim(sEmail).length == 0) {
            alert('Please enter valid email address');
            e.preventDefault();
        }
        if (validateEmail(sEmail)) {
            alert('Email is valid');
        }
        else {
            alert('Invalid Email Address');
            e.preventDefault();
        }
    });
});
    });
</script>

渲染视图时出现编译错误Unexpected character '\' in that regexpression。我该如何解决这个错误?

【问题讨论】:

  • 你只是混合功能,请分开,document.ready()和validateEmail()
  • 您是否尝试过使用 RegExp 的对象表示法,filter = new RegExp(pattern,modifiers);而不是文字符号 filter = /pattern/
  • 我已经将函数和文档分开了。现在我得到了同样的错误。
  • 剃刀视图引擎使用了@ 符号,这可能会导致一些问题。 stackoverflow.com/questions/4690066/…
  • 是的。这就是问题所在。我在那个正则表达式中又放了一个@。现在我的问题解决了。非常感谢

标签: jquery asp.net-mvc


【解决方案1】:

我有同样的错误。 Here 是答案。这个对我有用。需要使用@@ 而不是@。

你的情况是:

var filter = /^([\w-\.]+)@@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;

【讨论】:

    【解决方案2】:

    你的牙套有点奇怪。具体来说,您没有正确关闭 validateEmail 函数。这是更正后的 Javascript 代码:

        function validateEmail(sEmail) {
            var filter = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
            if (filter.test(sEmail)) {
                return true;
            }
            else {
                return false;
            }
        }
        $(document).ready(function() {
    
            $('#create').click(function() {
                var sEmail = $('#UserName').val();
                if ($.trim(sEmail).length == 0) {
                    alert('Please enter valid email address');
                    e.preventDefault();
                }
                if (validateEmail(sEmail)) {
                    alert('Email is valid');
                }
                else {
                    alert('Invalid Email Address');
                    e.preventDefault();
                }
            });
        });
    

    编辑:另外,不相关,您可以使 validateEmail 函数更简洁一些,因为 test 返回一个布尔值。见如下:

        function validateEmail(sEmail) {
            var filter = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
    
            return filter.test(sEmail);
        }
    

    【讨论】:

    • 我已经尝试过了,但我得到了相同的编译错误。我认为 javascript 错误不会产生任何编译错误。
    • 这是Javascript,不涉及编译。事实上,我不确定为什么这被标记为 ASP.net MVC。这只是一个 Javascript 和 jQuery 问题。
    • 从不。这个错误是由.net生成的。这就是为什么在运行时会产生编译错误
    • 我要么认为你误解了某些东西,要么你没有给我们完整的画面。如果您让 .Net 抱怨反斜杠,那可能是因为您没有转义反斜杠或类似的东西。我不确定你在做什么导致.Net在应该在JS文件或视图中时抱怨反斜杠,但尝试在你的正则表达式中的这些反斜杠之前添加一个反斜杠。无论哪种方式,您的 Javascript 代码也是无效的,可以使用我上面发布的内容进行修复。
    • 我已经尝试过您发布的代码。我正在使用 ASP.NET MVC4。
    猜你喜欢
    • 2010-10-09
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 2010-11-15
    相关资源
    最近更新 更多