Ověření regulárních výrazů PO Box

Zde je můj kód, ale nikdy nemohu spustit upozornění.

$(document).ready( function (){
    $("[id*='txtAddress1S']").blur(function() {
        var pattern = new RegExp('b[P|p]*(OST|ost)*.*s*[O|o|0]*(ffice|FFICE)*.*s*[B|b][O|o|0][X|x]b');
        if ($("[id*='txtAddress1S']").val().match(pattern)) {
            alert('We are unable to ship to a Post Office Box.nPlease provide a different shipping address.'); 
        }

    });
});

Odpověď

V javascriptu musíte escapovat svá lomítka:

var pattern = new RegExp('\b[P|p]*(OST|ost)*\.*\s*[O|o|0]*(ffice|FFICE)*\.*\s*[B|b][O|o|0][X|x]\b');

Také můžete svůj vzor trochu zredukovat použitím shody bez rozlišení velkých a malých písmen:

var pattern = new RegExp('\b[p]*(ost)*\.*\s*[o|0]*(ffice)*\.*\s*b[o|0]x\b', 'i');

Poznámka: Váš regulární výraz se také shoduje na adresách, jako je:

  • 123 Poor Box Road
  • 123 Harpo Box Street

Navrhoval bych také zkontrolovat číslo v řetězci. Možná by vám pomohl tento vzor z předchozí odpovědi:

var pattern = new RegExp('[PO.]*\s?B(ox)?.*\d+', 'i');

(nebude se shodovat s výrazem „Pošta“ nebo s numerickými náhradami.. ale je to začátek.)