Home > Software design >  A regex to allow exactly 5 digit number with one optional white space before and after the number?
A regex to allow exactly 5 digit number with one optional white space before and after the number?

Time:12-11

With the regex in the jQuery code below, I can restrict the input text field to accept only 5 digits but it allows more white spaces before and after the number than just one. I mean to match a 5-digit number that is at the beginning of the string or is preceded by at most one space and is at the end of the string or is followed by at most one space. Please help me refine my regex to meet my requirement.

jQuery("input:text[name='address_1[zip]']").change(function(e) {
if (!jQuery(this).val().match(/\b\d{5}\b/g)) { 
        alert("Please enter a valid zip code");
        jQuery("input[name='address_1[zip]']").val("");
        return false;                        
    }        
});

CodePudding user response:

I might suggest just using lookarounds here:

/(?<![ ]{2})\b\d{5}\b(?![ ]{2})/

This pattern says to:

(?<![ ]{2})  assert that 2 (or more) spaces do NOT precede the ZIP code
\b\d{5}\b    match a 5 digit ZIP code
(?![ ]{2})   assert that 2 (or more) spaces do not follow

Here is a demo showing that the pattern works.

CodePudding user response:

You need to parse the beginning of line and end of line

match(\A\s?\d{5}\s?\z/g)

CodePudding user response:

I think this will do.

/^\s?\d{5}\s?$/

Here's the pure JavaScript test code. You will have to convert this into JQuery style.

let p = /^\s?\d{5}\s?$/
let input = ' 54525 ';
let match = p.test( input );
console.log( match )
  • Related