Amir
Amir

Reputation: 4770

How to insert a space every three characters UP TO a period character?

I've been trying to format my inputs to have a space every three characters, up to the period character.

For example:

999999999 => 999 999 999

33333.25 => 33 333.25

222.32 => 222.32

4444 => 4 444

Here is what I have so far:

$(this).on('keyup', function(){
            $(this).val( $(this).val().replace(/(\d{3})(?=.)/g, "$1 ") ); 
        });

But this results in this:

999999999 => 999 999 999 OK

33333.25 => 333 33.25 NOT OK

222.32 => 222 .32 NOT OK

4444 => 444 4 NOT OK

Upvotes: 7

Views: 7188

Answers (1)

anubhava
anubhava

Reputation: 785156

You can use this lookahead based regex:

str = str.replace(/(?!^)(?=(?:\d{3})+(?:\.|$))/gm, ' ');

RegEx Demo

RegEx Breakup:

(?!^)          # Assert we are not at start of line
(?=            # start of positive lookahead
   (?:\d{3})+  # assert there are 1 or more of 3 digit sets ahead
   (?:\.|$)    # followed by decimal point or end of string
)              # end of lookahead

Upvotes: 11

Related Questions