1 回答

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超9個(gè)贊
不要將所有內(nèi)容都塞入 HTML 事件屬性中。寫(xiě)一個(gè)函數(shù)!
String.fromCharCode(34)
這也消除了僅使用雙引號(hào)字符的必要性。順便說(shuō)一句,如果您確實(shí)需要在 HTML 屬性中使用雙引號(hào)字符,只需使用
"
.RegExp(/^\d*\.?\d*$/)
是重復(fù)的。只需使用/^\d*\.?\d*$/
, 因?yàn)樗呀?jīng)是一個(gè)正則表達(dá)式。RegExp
如果您想將字符串轉(zhuǎn)換為正則表達(dá)式,則使用:RegExp("^\\d*\\.?\\d*$")
.調(diào)用
.exec()
并使用它作為參數(shù)是.replace()
沒(méi)有意義的。.exec()
返回一個(gè)數(shù)組(包含匹配項(xiàng)),但.replace()
需要一個(gè)正則表達(dá)式(或字符串)作為它的第一個(gè)參數(shù)。您還需要將g
(lobal) 標(biāo)志添加到表達(dá)式中,否則只會(huì)替換第一個(gè)匹配項(xiàng)this.value?=?this.value.replace(/[A-Za-z-!$%^&*()_+|~=`{}\[\]:;'<>?,\/"]+/g,?'');
請(qǐng)注意,我在正則表達(dá)式中添加了雙引號(hào)字符。但是,僅替換不是數(shù)字或句點(diǎn)的所有內(nèi)容可能會(huì)更容易:
this.value?=?this.value.replace(/[^\d.]/g,?'');
不能僅使用正則表達(dá)式來(lái)刪除額外的句點(diǎn)(至少不是在所有當(dāng)前的瀏覽器中)。一種方法是在句點(diǎn)處處理.split
字符串,然后將其與第一項(xiàng)和第二項(xiàng)之間的句點(diǎn)連接起來(lái):
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("");?
? }
}
最終結(jié)果(.test
不需要??偸莿h除所有無(wú)效字符):
function?removeInvalidNumberChars(element)?{ ??element.value?=?removeAllButFirstPeriod(element.value.replace(/[^\d.]/g,?'')); }
與(input
事件是比 更好的選擇keydown
)
<input?oninput="removeInvalidNumberChars(this)">
添加回答
舉報(bào)