验证器抛出错误

时间:2010-09-08 16:18:00

标签: asp.net regex validation

我的一个页面上有以下RegularExpressionValidator:

<asp:RegularExpressionValidator ID="RegularExpressionValidator2" runat="server" 
                                        ControlToValidate="InKindTextBox"
                                        ErrorMessage="The value entered for 'Cash' must be in a number format.   Examples: 500.00, 500, $500, $50,000 or $500.00" 
                                        ValidationExpression="(?n:(^\$?(?!0,?\d)\d{1,3}(?=(?<1>,)|(?<1>))(\k<1>\d{3})*(\.\d\d)?)$)" >

但是当它试图验证它时会从我的一个动态JS页面抛出下面的错误。

alt text

当我通过regex texter运行此正则表达式时,它运行正常。我在这里做错了吗?

2 个答案:

答案 0 :(得分:3)

我认为你的正则表达式太复杂了。我会使用像

这样简单的东西
^[1-9]\d*(\.\d*)?$

这表示没有前导0,小数点前至少有一个数字,可选的小数点后跟更多的数字。

修改

^\$?([1-9]\d?\d?((,\d{3})*|(\d{3})*)|0?)(\.\d*)?$

测试它

var r = /^\$?([1-9]\d?\d?((,\d{3})*|(\d{3})*)|0?)(\.\d*)?$/;
var shouldMatch = ["$30,000.00", "30,000.00", "9,000.00", "9000", "1", ".12"];
var shouldntMatch = ["30,000000.00", "1.00c", "19,00.00", "$30,00"];
function test1() {
  for (var i in shouldMatch) {
    if (!r.exec(shouldMatch[i])) {
      alert(shouldMatch[i]);
      return;
    }
  }
}
function test2() {
  for (var i in shouldntMatch) {
    if (r.exec(shouldntMatch[i])) {
      alert(shouldntMatch[i]);
      return;
    }
  }
}
test1();
test2();

答案 1 :(得分:2)

JavaScript使用与.NET不同的regexp语法。例如,请参阅this page

引自MSDN的RegularExpressionValidator page

  

正则表达式验证   实施略有不同   在客户端上而不是在服务器上。上   客户端,JScript正则表达式   使用语法。在服务器上,   System.Text.RegularExpressions.Regex   使用语法。由于JScript有规律   表达式语法是。的子集   System.Text.RegularExpressions.Regex   语法,建议使用JScript   使用正则表达式语法   为了得到相同的结果   客户端和服务器。

更新:可以找到包括.NET和JavaScript在内的多种语言的正则表达式风格的全面比较{。{3}}。

更新2: 下面是一个正则表达式,应使用符合jScript的正则表达式验证货币输入:

                        <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" 
                                    ControlToValidate="CashTextBox" ValidationGroup="vld_Insert"
                                    ErrorMessage="The value entered for 'Cash' must be in a number format.  Examples: 5000, 5000.00, 5,000 or $5,000.00" 
                                    ValidationExpression="^\s*\$?\s*(?!\d{4,},)(\d|\d{1,3},(?=\d{3})(?!\d{4}))*(\.\d{1,2})?\s*$">