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

Viewed 564

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;                        
    }        
});
3 Answers

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.

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

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

This mean:

  • \A begin of string
  • \s? One optional space
  • \d{5} five digits
  • \s? One optional space
  • \z end of string

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