我正在使用 javascript 来验证来自 ASPxGridView 控件(DevExpress 组件)内的文本框的输入。
我正在使用这个 javascript 代码来验证它(通过 OnKeyPress 事件):
function CheckKey(s, e) {
var key = ASPxClientUtils.GetKeyCode(e.htmlEvent);
var char = String.fromCharCode(key);
if (e.htmlEvent.shiftKey) {
if (!IsAvailableChar(char))
ASPxClientUtils.PreventEvent(e.htmlEvent);
} else
if (!(IsAvailableChar(char) || IsAvailableKey(key))) ASPxClientUtils.PreventEvent(e.htmlEvent);
return;
}
function IsAvailableChar(char) {
var AvailableChars = "0123456789,";
return AvailableChars.indexOf(char) != -1;
}
function IsAvailableKey(key) {
switch (key) {
case 46: //delete
return true;
break;
case 37: //left arrow
return true;
break;
case 39: //right arrow
return true;
break;
case 16: //shift
return true;
break;
case 188: //comma
return true;
break;
default:
return false;
break;
}
我用它来“阻止”一些字符,它工作正常。但现在我想做一些更复杂的事情:我不希望用户在文本框中输入多个逗号。
比这更复杂一点:这个文本框的最大长度是 6。我希望它只允许两个小数位,并且在小数点前最多三个数字。例如:我希望它允许这些字符串:“123,12”、“45,32”、“7,65”、“9,6”、“85,32”、“94,1”、“310”、 2"。我不希望它允许这些字符串:“1,123”、“125,789”、“1234,2”
关于我如何做到这一点的任何想法?
谢谢!
编辑:
我尝试使用你们告诉我喜欢的两个正则表达式:
function CheckKey(s, e) {
var key = ASPxClientUtils.GetKeyCode(e.htmlEvent);
var char = String.fromCharCode(key);
var text = document.getElementsByName(s.uniqueID)[0].value + char;
var regEx = new RegExp("/^\d{0,3}(,\d{0,2})?$/");
if(regEx.test(text))
return;
else
ASPxClientUtils.PreventEvent(e.htmlEvent);
return;
}
但是,regEx.test(text)
即使输入与正则表达式匹配,它也总是返回 false。
另一个编辑:
我在上面的代码中更改了 RegExp 对象的实例化:
var regEx = new RegExp("/^\d{0,3}(,\d{0,2})?$/");
对此:
var regEx = /^\d{0,3}(,\d{0,2})?$/
现在它起作用了,谢谢!