Javascript如何允许在删除除数字以外的所有内容的脚本中使用句点

Javascript how to allow period in script that removes everything except numbers?

本文关键字:脚本 句点 Javascript 删除 何允许 数字      更新时间:2023-09-26

这是我希望允许输入句点"."的代码。现在的代码只允许数字。需要改变什么才能实现这一点?

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+$/,'');
    }
};

此外,您是否了解是否有更有效的方法来编写此代码?可以对它进行任何优化吗?我只是想只允许输入数字和句点。提前谢谢。

您很可能希望使用此正则表达式来匹配数字和/或句点:/('.'d)*/

来源:String.prototype.match上的MDN页面https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/match

此行修剪字符串开头处的空白,并将其分配给v:

v=o.value.replace(/^'s+|'s+$/,'');

该行将v的最后一个符号分配回v:

v=v.substr(v.length-1);

此表达式检查最后一个符号是否不是数字:

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*$/, '');
}