亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

僅在字段中限制一個句點/小數(客戶端驗證)正則表達式

僅在字段中限制一個句點/小數(客戶端驗證)正則表達式

肥皂起泡泡 2023-04-20 16:28:36
我在 JavaScript 中有一個客戶端驗證函數,用于允許用戶輸入美元金額的字段值。驗證工作完美(只允許輸入數字和句點/小數)到字段中。所有其他字符都被簡單地刪除。我喜歡更新函數,它只允許輸入一位小數/句點,超過一位將被刪除這是我到目前為止所擁有的:onkeyup="if (!RegExp(/^\d*\.?\d*$/).test(this.value)) { this.value = this.value.replace(RegExp(/[A-Za-z-!$%^&*()_+|~=`{}\[\]:;'<>?,\/]+/).exec(this.value), '').replace(String.fromCharCode(34), '');}"任何幫助/建議都會很棒!
查看完整描述

1 回答

?
慕妹3146593

TA貢獻1820條經驗 獲得超9個贊

  1. 不要將所有內容都塞入 HTML 事件屬性中。寫一個函數!String.fromCharCode(34)這也消除了僅使用雙引號字符的必要性。

    順便說一句,如果您確實需要在 HTML 屬性中使用雙引號字符,只需使用&quot;.

  2. RegExp(/^\d*\.?\d*$/)是重復的。只需使用/^\d*\.?\d*$/, 因為它已經是一個正則表達式。RegExp如果您想將字符串轉換為正則表達式,則使用:RegExp("^\\d*\\.?\\d*$").

  3. 調用.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不需要??偸莿h除所有無效字符):

function?removeInvalidNumberChars(element)?{
??element.value?=?removeAllButFirstPeriod(element.value.replace(/[^\d.]/g,?''));
}

與(input事件是比 更好的選擇keydown

<input?oninput="removeInvalidNumberChars(this)">


查看完整回答
反對 回復 2023-04-20
  • 1 回答
  • 0 關注
  • 169 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號