Asp.net 验证程序抛出错误

Asp.net 验证程序抛出错误,asp.net,regex,validation,Asp.net,Regex,Validation,我的一个页面上有以下RegularExpressionValidator: <asp:RegularExpressionValidator ID="RegularExpressionValidator2" runat="server" ControlToValidate="InKindTextBox" ErrorMessage="

我的一个页面上有以下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页面抛出下面的错误


当我运行这个正则表达式时,它工作得很好。我在这里做错了什么吗?

JavaScript使用了与.NET不同的regexp语法。例如,请参见

引用MSDN的内容:

正则表达式验证 实现略有不同 在客户机上,而不是在服务器上。在…上 客户端,JScript正则表达式 使用语法。在服务器上, System.Text.RegularExpressions.Regex 使用语法。因为JScript是正则的 表达式语法是 System.Text.RegularExpressions.Regex 语法,建议使用JScript 正则表达式语法不能用于 以便在上产生相同的结果 客户端和服务器

更新:可以找到许多语言(包括.NET和JavaScript)中正则表达式风格的彻底比较

更新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*$">

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

引用MSDN的内容:

正则表达式验证 实现略有不同 在客户机上,而不是在服务器上。在…上 客户端,JScript正则表达式 使用语法。在服务器上, System.Text.RegularExpressions.Regex 使用语法。因为JScript是正则的 表达式语法是 System.Text.RegularExpressions.Regex 语法,建议使用JScript 正则表达式语法不能用于 以便在上产生相同的结果 客户端和服务器

更新:可以找到许多语言(包括.NET和JavaScript)中正则表达式风格的彻底比较

更新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*$">

我觉得你的正则表达式太复杂了。我会用更简单的方法,比如

^[1-9]\d*(\.\d*)?$
也就是说,没有前导0,小数点前至少有一个数字,可选的小数点后面跟着更多的数字

编辑

测试它

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-9]\d*(\.\d*)?$
也就是说,没有前导0,小数点前至少有一个数字,可选的小数点后面跟着更多的数字

编辑

测试它

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();

我想接受带有美元符号和逗号的输入。您的太简单了。在这种情况下,您需要更改错误消息。如果您描述的格式,您的目标是更好的一点,我们可以找出这个问题。错误消息更改在您的要求。我希望接受在正确位置使用美元符号和逗号的有效美国输入$3000=有效$30,00=无效+1感谢更新。提出了我自己的符合jScript的正则表达式。与你的相似,但略有不同。您可以在@Ondrej Tucny答案的更新2中看到它。我想接受带有美元符号和逗号的输入。您的太简单了。在这种情况下,您需要更改错误消息。如果您描述的格式,您的目标是更好的一点,我们可以找出这个问题。错误消息更改在您的要求。我希望接受在正确位置使用美元符号和逗号的有效美国输入$3000=有效$30,00=无效+1感谢更新。提出了我自己的符合jScript的正则表达式。与你的相似,但略有不同。您可以在@Ondrej Tucny answer的update2中看到它。您知道如何将我的正则表达式转换为jScrpt正则表达式吗更新了一个指向比较页面的链接-这是正确翻译regexp的好帮手。此外,请检查他们的regexp工具。他们的powergrep是一个非常有用的应用程序。你知道如何将我的正则表达式转换为jScrpt正则表达式吗更新了一个指向比较页面的链接-这是正确翻译regexp的好帮手。此外,请检查他们的regexp工具。他们的powergrep是一个非常有用的应用程序。