2016-04-07 10 views
0

OK, ich muss überprüfen, ob eine Zeichenfolge eine Postleitzahl enthält.JavaScript Regexp nur Teil der Zeichenfolge

Dies ist der Code einschließlich Regex.

var isPostal = addressPickerCtrl.address.match(/^[1-9][0-9]{3} ?(?!sa|sd|ss)[a-z]{2}$/gi); 

Also, wenn ich 1234AA geben alles in Ordnung ist, erhalte ich die postal zurück. Aber sobald ich mehr Zeichen eingegeben habe, schlägt der Regexp fehl. Zum Beispiel "1234AA 19".

Ich muss überprüfen, ob die ganze Zeichenfolge eine Postleitzahl enthält. Nicht eine 100% Übereinstimmung der Regexp.

(Ich bin ziemlich neu in Regexp)

+2

Warum haben Sie Stringgrenzen^und $? –

+1

ersetzen Sie die Anker durch Wortgrenzen. '\ B [1-9] [0-9] {3}? (?! sa | sd | ss) [az] {2} \ b' –

Antwort

2

Wenn Sie die gesamte Zeichenfolge überprüfen, nicht möchten, entfernen Sie die ^ und $ Anker:

var isPostal = addressPickerCtrl.address.match(/[1-9][0-9]{3} ?(?!sa|sd|ss)[a-z]{2}/gi); 

Ihr Zweck ist, genau zu zwingen, die überprüfen ganze Zeichenfolge durch Abgleichen des Anfangs und des Endes der Zeichenfolge. Siehe the MDN on regular expressions.

+1

Die Wortgrenzen könnten sich ändern in diesem Szenario aufgrund des Lookahead (jetzt, ohne Anker, es funktioniert nicht so, wie es erwartet wird) und '[1-9] [0-9] {3}' am Anfang (das kann jetzt passen) passender sogar innerhalb einer längeren Zahl). –

+0

@ WiktorStribiżew Nur OP kann für seinen eigenen Anwendungsfall erzählen. Es ist zum Beispiel sehr gut möglich, dass der erste Anker * notwendig war. Ich stelle nicht wirklich die Regex bereit, die im endgültigen Code verwendet werden sollte, sondern erläutere sie, damit OP das am besten geeignete bestimmen kann. –

+0

Ich entfernte den Lookahead –

Verwandte Themen