1 回答
TA贡献1820条经验 获得超9个赞
不要将所有内容都塞入 HTML 事件属性中。写一个函数!
String.fromCharCode(34)
这也消除了仅使用双引号字符的必要性。顺便说一句,如果您确实需要在 HTML 属性中使用双引号字符,只需使用
"
.RegExp(/^\d*\.?\d*$/)
是重复的。只需使用/^\d*\.?\d*$/
, 因为它已经是一个正则表达式。RegExp
如果您想将字符串转换为正则表达式,则使用:RegExp("^\\d*\\.?\\d*$")
.调用
.exec()
并使用它作为参数是.replace()
没有意义的。.exec()
返回一个数组(包含匹配项),但.replace()
需要一个正则表达式(或字符串)作为它的第一个参数。您还需要将g
(lobal) 标志添加到表达式中,否则只会替换第一个匹配项this.value = this.value.replace(/[A-Za-z-!$%^&*()_+|~=`{}\[\]:;'<>?,\/"]+/g, '');
请注意,我在正则表达式中添加了双引号字符。但是,仅替换不是数字或句点的所有内容可能会更容易:
this.value = this.value.replace(/[^\d.]/g, '');
不能仅使用正则表达式来删除额外的句点(至少不是在所有当前的浏览器中)。一种方法是在句点处处理.split
字符串,然后将其与第一项和第二项之间的句点连接起来:
function removeAllButFirstPeriod(string) {
const split = string.split(".");
if (split.length === 1) {
// If the split string contains only one element, then there were no periods in the string
return split[0];
} else {
return split[0] + "." + split.slice(1).join("");
}
}
最终结果(.test
不需要。总是删除所有无效字符):
function removeInvalidNumberChars(element) { element.value = removeAllButFirstPeriod(element.value.replace(/[^\d.]/g, '')); }
与(input
事件是比 更好的选择keydown
)
<input oninput="removeInvalidNumberChars(this)">
添加回答
举报