2011-04-15 12 views
9

Aquí está mi código, pero no puedo disparar la alerta.Validación de expresión regular de casilla postal

$(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.'); 
     } 

    }); 
}); 

¡Gracias de antemano!

Respuesta

13

en JavaScript, que tiene que escapar de sus barras:

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

Además, usted podría reducir su patrón un poco mediante el uso de mayúsculas y minúsculas juego:

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

Nota: Su expresión regular también coincide en direcciones tales como:

  • 123 Poor Box Road
  • 123 Harpo Box Calle

sugeriría también la comprobación de una serie en la cadena. Tal vez este patrón de una previous answer sería de alguna ayuda:

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

(. No coincidirá con "Post Office" desarrollar o para las sustituciones numéricas .. pero es un comienzo)

+0

+1, que se pensando lo mismo. Ahora que ha hecho que no distinga entre mayúsculas y minúsculas, ¿por qué no quita los corchetes de las letras individuales, es decir, 'b [o | 0] x' en lugar de' [b] [o | 0] [x] '. –

+0

@John: Gracias por el consejo. Lo he editado en la respuesta. – drudge

+0

¡Gracias! Eso fue exactamente correcto. – s15199d

4

Con Javascript es más fácil de usar una expresión regular literal de este modo:

var pattern = /\b(?:p\.?\s*o\.?|post\s+office)\s+box\b/i; 

(No se requieren barras invertidas!)

26

he probado varios patrones PO Box RegExp se encuentran en Internet incluyendo el publicados en Stack Overflow, ninguno de ellos pasó nuestros requisitos de prueba. Por lo tanto, he publicado nuestra RegExp abajo y nuestros equipos de prueba:

var poBox = /^ *((#\d+)|((box|bin)[-. \/\\]?\d+)|(.*p[ \.]? ?(o|0)[-. \/\\]? *-?((box|bin)|b|(#|num)?\d+))|(p(ost)? *(o(ff(ice)?)?)? *((box|bin)|b)? *\d+)|(p *-?\/?(o)? *-?box)|post office box|((box|bin)|b) *(number|num|#)? *\d+|(num|number|#) *\d+)/i; 

var matches = [ //"box" can be substituted for "bin" 
    "#123", 
    "Box 123", 
    "Box-122", 
    "Box122", 
    "HC73 P.O. Box 217", 
    "P O Box125", 
    "P. O. Box", 
    "P.O 123", 
    "P.O. Box 123", 
    "P.O. Box", 
    "P.O.B 123", 
    "P.O.B. 123", 
    "P.O.B.", 
    "P0 Box", 
    "PO 123", 
    "PO Box N", 
    "PO Box", 
    "PO-Box", 
    "POB 123", 
    "POB", 
    "POBOX123", 
    "Po Box", 
    "Post 123", 
    "Post Box 123", 
    "Post Office Box 123", 
    "Post Office Box", 
    "box #123", 
    "box 122", 
    "box 123", 
    "number 123", 
    "p box", 
    "p-o box", 
    "p-o-box", 
    "p.o box", 
    "p.o. box", 
    "p.o.-box", 
    "p.o.b. #123", 
    "p.o.b.", 
    "p/o box", 
    "po #123", 
    "po box 123", 
    "po box", 
    "po num123", 
    "po-box", 
    "pobox", 
    "pobox123", 
    "post office box" 
]; 

var nonMatches = [ 
    "The Postal Road", 
    "Box Hill", 
    "123 Some Street", 
    "Controller's Office", 
    "pollo St.", 
    "123 box canyon rd", 
    "777 Post Oak Blvd", 
    "PSC 477 Box 396", 
    "RR 1 Box 1020" 
]; 
+0

Esto funciona mejor para Java. ¡Gracias! –

+0

777 Post Offie Box = devuelve falso – kadalamittai

+0

esto parece perderse 'Post Box # 123' – anson

0

Esto se está trabajando bastante bien para nosotros. (PHP preg_match)

$pattern = '!p(ost)?\.?\s*o(ffice)?\.?(box|\s|$)!i'; 
+0

Funcionó muy bien aquí, gracias! – Jedihe

1

Esto es lo que he usado la contabilidad de los espacios y entre mayúsculas y minúsculas:

http://regexr.com/3cc2q

var pattern = /\bP(ost|ostal)?([ \.]*(O|0)(ffice)?)?([ \.]*Box)?\b/i; 
  • fallan - po box
  • fallan - correos Caja
  • fallan - po bo
  • fallan - taquillas posterior
  • fallan - apartados de correos Box
  • fail - PO.Caja
  • falle - cuadro PO
  • fallan - POBox
  • fallar - PO Box
  • fallan - PO Box
  • fallan - PO
  • fallan - Postal Box
  • fallan - Post Office Box
  • pase - caja de caca
  • pase - cuadro de caballo
+0

Esto falla "1223 P Street" y "34 PO Road" –

0

Su trabajó para mí,

var poRegex = /\bP(ost|ostal)?([ \.]*O(ffice)?)?([ \.]*Box)?\b/i; 
Cuestiones relacionadas