【发布时间】:2021-03-13 20:55:36
【问题描述】:
我需要在文本框中显示数以千计的逗号分隔符格式的数字。每个文本框都是这样的:
<asp:TextBox ID="txtNumber" MaxLength="16" runat="server" onfocus="unFormatTextBox(this);" onblur="formatTextBox(this);" />
绘制页面时,数字在服务器端格式化,因此 1000.50 将变为 1,000.50,并将其设置为文本框值。
当用户点击文本框时 - 为了便于编辑 - 逗号被删除。
function unFormatTextBox(elementId) {
// removes commas on focus
var num = elementId.value;
elementId.value = num.replaceAll(',', '');
}
当用户点击其他地方并且文本框失去焦点时,条目被重新格式化并重新插入逗号..
function formatTextBox(elementId) {
// add commas on mouseout
var num = elementId.value;
var parts = num.toString().split(".");
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
elementId.value = parts.join(".");
}
这非常有效。但是它与 RegularExpressionValidator 冲突..
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="txtNumber" ErrorMessage="" ValidationExpression="^[0-9]{1,3}(,[0-9]{3})*(\.[0-9]+)?$">*</asp:RegularExpressionValidator>
所以用户键:
1500
当文本框失去焦点时,例如他们点击到下一个,它被重新格式化为:
1,500
问题:验证器随后触发并显示条目不正确,即使它应该没问题。验证器应该允许该条目带有逗号(然后我在处理提交的值之前删除该服务器端)。
但是,如果用户随后单击“提交”,您可能会认为这将不起作用,因为字段被突出显示为无效 - 实际上,它确实起作用并且页面提交。
谁能帮助解释为什么会发生这种情况以及如何阻止它?非常感谢。
【问题讨论】:
-
只是为了澄清一点:用户密钥 1,500 - 验证器触发并指示不正确的值。即便如此:表单仍将提交。用户密钥 ABCD - 验证器触发并且表单将不提交。验证者的行为在这方面是正确的。问题是该字段实际有效时在屏幕上突出显示。
标签: javascript asp.net regex validation