这是我希望有句号的代码“。”被允许进入。现在的代码只允许数字。需要改变什么才能实现这一目标?
function check(o)
{
v=o.value.replace(/^\s+|\s+$/,''); // remove any whitespace
if(o=='') {
return;
}
v=v.substr(v.length-1);
if(v.match(/\d/g)==null) {
o.value=o.value.substr(0,o.value.length-1).replace(/^\s+|\s+$/,'');
}
};
你也看到有没有更有效的方法来编写这段代码?可以对它进行任何优化吗?我只想允许输入数字和句点。提前谢谢。
答案 0 :(得分:0)
您最有可能希望使用此正则表达式匹配数字和句点:/(\.\d)*/
来源:String.prototype.match https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/match
上的MDN页面答案 1 :(得分:0)
此行修剪字符串末尾的beginnig 或处的空格,并将其分配给v:
v=o.value.replace(/^\s+|\s+$/,'');
此行将v的最后一个符号分配给v:
v=v.substr(v.length-1);
此esxpression检查此最后一个符号是否不是数字:
v.match(/\d/g)==null
如果它不是一个数字,它会使o.value具有其值,但会被修剪而没有最后一个数字。
o.value=o.value.substr(0,o.value.length-1).replace(/^\s+|\s+$/,'');
如果您询问此代码的效率,首先从代码的可读性和可支持性的角度来看效率不高。尽管函数的名称是'check',但它会做很多不同的事情,除了回复检查的结果。
如果要检查输入的最后一个非空白符号是否为数字/点,则该函数将为:
function endsWithDigit(input) {
return input.trim().match(/[0-9\.]$/);
}
如果您想删除最后一个符号(如果它不是数字):
function removeNotDigit(input) {
if (!endsWithDigit(input) {
return input.replace(/.\s*$/, '');
} esle {
return input;
}
}
或者你可以在没有明确检查的情况下编写最后一个函数:
function removeNotDigin(input) {
return input.replce(/[0-9\.]\s*$/, '');
}