简体   繁体   中英

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

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

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

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

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.

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 )

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM