2013-07-27 11 views
12

Sto provando a creare un'espressione regolare in javascript per convalidare un codice postale olandese.Espressione regolare per il codice postale/codice postale olandese

Il codice postale deve contenere 4 numeri, quindi opzionalmente uno spazio e quindi 2 lettere (case insensitive)

valori validi:

1001aa 
1001Aa 
1001 AA 

ora ho questo, ma non funziona:

var rege = /^([0-9]{4}[ ]+[a-zA-Z]{2})$/; 
+1

Si utilizzano le rotture intorno allo spazio, si utilizzano quelle per definire un intervallo di caratteri, ad es. '[0-6]' fa da 0 a 6. Basta sostituirlo con '?' (Uno spazio e un punto interrogativo per renderlo opzionale – Martijn

+4

Come parte a parte: i codici postali olandesi non iniziano mai con uno zero. – Arjan

+3

Né ci sono codici postali che terminano in SS, SA o SD. – Bart

risposta

39

Modificato per gestire nessun requisito 0 principale per i codici postali olandesi e per eliminare le corrispondenze per SS, SA e SD. Questo dovrebbe fare tutto per te.

regex finale:

var rege = /^[1-9][0-9]{3} ?(?!sa|sd|ss)[a-z]{2}$/i; 

Fiddle unit test: http://jsfiddle.net/hgU3u/

Ecco la ripartizione:

  1. ^ partite inizio della stringa
  2. [1-9][0-9]{3} corrisponde una sola cifra diversa da zero, e tre 0-9 cifre
  3. ? partite 0 o 1 spazi (si potrebbe usare * per corrispondere 0 o più spazi)
  4. (?!sa|sd|ss) è un test lookahead per verificare che il resto non è "sa", "SD", o "ss".
  5. [a-z]{2} partite 2 a-z caratteri
  6. $ corrisponde alla fine della stringa
  7. i alla fine è il modificatore case-insensitive
+0

Sì, questa è anche una soluzione corretta. A + in regex è uno o più "hit" del precedente carattere regex (o un pattern tra parentesi). –

5

Ecco la mia soluzione. L'ho alla fine rende-case insensitive:

var rege = /^\d{4} ?[a-z]{2}$/i; 
1

In caso di problemi con questo come modello per la validazione di bootstrap ti suggerisco di cambiare a:

^[1-9][0-9]{3} ?(?!sa|sd|ss|SA|SD|SS)[A-Za-z]{2}$ 

questo modo è ancora caso -insensibile e accettato dal validatore bootstrap.