我正在使用javascript来验证来自ASPxGridView控件(DevExpress组件)内的文本框的输入。使用javascript验证输入字符数量,文本长度和小数位数
我使用这个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 = ",";
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)
总是返回假,即使在输入匹配正表达。
另一个编辑:
我从这个改变了RegExp对象的实例在上面的代码:
var regEx = new RegExp("/^\d{0,3}(,\d{0,2})?$/");
要这样:
var regEx = /^\d{0,3}(,\d{0,2})?$/
而现在它的工作,谢谢!
做'console.log(文本)'在创建文本之后,并将结果发布给我们。 – FrankieTheKneeMan
还包括事件发生时盒子的实际内容。 – FrankieTheKneeMan
不需要,我更新问题与我所做的工作。谢谢! (: – gabsferreira