Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

181
Views
regex for input mask - comma separated list of up to three characters per item

I have an input field, which I want to limit as follows:

  1. The input will be a comma-separated list
  2. Each string in the list must be limited to 1..3 characters
  3. The list can have as many items as the user wants

some examples:

1,4,6a,16b
1
abc,def,ghi,jkl,mno,pqr,stu,vwx,yzz

I have found the following jsfiddle: https://jsfiddle.net/2x8y1dhL/ which provides a starting point for creating an input mask, but it assumes a fixed number of items in the list, and a fixed length of each input.

What I want is the following logic:

  • after the user inputs the third character in a row that isn't a comma, a comma is automatically inserted
almost 4 years ago · Santiago Trujillo
2 answers
Answer question

0

I have worked on the jsfiddle you have found. Some notes:

  • You have not specified valid/invalid characters, but the examples given seem to suggest "alpha-numeric plus comma"
  • Consecutive commas are allowed as it's not specified otherwise.

The meat of the matter are the two functions createMask and destroyMask:

function createMask(string){
    return string.replace(/(\w{3})(?!,)(.+)$/g,"$1,$2");
}

function destroyMask(string){
    return string.replace(/[^0-9A-Z,]/ig,'');
}

Update 1: Pasting input that is longer than six characters - i.e. needs to be split more than once - turned out to be problematic with the original answer. An explicit loop is needed as the g modifier does not help with that regex. Here's the updated fiddle:

function createMask(string){
  let s = string;
  let t;
  do {
    t = s;
    s = s.replace(/(\w{3})(?!,)(.+)$/,"$1,$2");    
  } while (s !== t)
  return s;
}

Update 2: However, we can get away without an explicit loop with this alternative regex that only uses a single capture - updated fiddle:

function createMask(string){
    return string.replace(/(\w{3})(?!,|$)/g,"$1,");
}
almost 4 years ago · Santiago Trujillo Report

0

You can repeat optional repetitions of 3 word characters followed by a comma and then match 3 word characters asserting a word char to the right.

^(?:\w{3},)*\w{3}(?=\w)

Regex demo | Forked fiddle

In the replacement use the full match $& followed by a comma.

$("input[name='masknumber']").on("input", function(){
  let n = destroyMask(this.value);
    this.setAttribute("data-normalized", n);
  this.value = createMask(n);
})

function createMask(string){
    return string.replace(/^(?:\w{3},)*\w{3}(?=\w)/g,"$&,");
}

function destroyMask(string){
    return string.replace(/[^0-9A-Z,]/ig,'');
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" name="masknumber" data-normalized="" size=64>

Or fiddle demo with a variant with 2 capture groups.

almost 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!