我的一个页面上有以下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页面抛出下面的错误。
当我通过regex texter运行此正则表达式时,它运行正常。我在这里做错了吗?
答案 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*$">