簡體   English   中英

用jquery和regex格式化正負十進制數

[英]Format positive and negative decimal numbers with jquery and regex

我認為,我在下面的jsfiddle中發現了這段代碼,它非常好。 但是它不會格式化負數,而只會格式化正數。 我試圖對其進行修改,但是我對正則表達式的了解還不夠。 有人可以幫我修改此格式以設置正數和負數嗎?

 $('#valor').keyup(function(){ var v = $(this).val(); v = v.replace(/\\D/g,''); v = v.replace(/(\\d{1,2})$/, ',$1'); v = v.replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1.'); v = v != '' ? 'R$ '+ v : ''; $(this).val(v); }); 

您可以在啟動時檢查值是否為負,然后在末尾添加符號:

$('#valor').keyup(function(){
    let v = $(this).val();
    const neg = v.startsWith('-');

    v = v.replace(/[-\D]/g,'');
    v = v.replace(/(\d{1,2})$/, ',$1');
    v = v.replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1.');

    v = v != ''?'$ '+v:'';
    if(neg) v = '-'.concat(v);  // prepend the dash

    $(this).val(v);
});

jsfiddle


編輯:這是一個更“純”的正則表達式解決方案:

$('#valor').keyup(function(){
    let v = $(this).val();

    v = v.replace(/[^-\d]/g, '');
    v = v.replace(/(\d{1,2})$/g, ',$1');
    v = v.replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1.');

    v = v ? '$ ' + v : '';
    $(this).val(v);

});

jsfiddle

基本上,在第一個replace語句中,將'-'添加到被替換的字符集中,即,在此新版本中,不是數字或破折號的所有內容都將替換為''

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM