2015-12-07 4 views
7

Ich brauche eine Regex, die eine Zeichenfolge entspricht, wie der Benutzer es eingibt. Es ist ein bisschen schwer zu erklären, so lassen Sie mich zeigen, was ich meine:Wie kann ich einen "progressiv passenden" Regex erstellen?

"XXXX units", wobei XXXX eine beliebige Anzahl ist:

es diese Zeichenfolge übereinstimmen sollte.

Aber es sollte auch jede Teil von Anfang an dieser Zeichenfolge übereinstimmen, so:

"123" 
"123 u" 
"123 uni" 

sollte auch passen.

Aber natürlich sollte dies nicht entsprechen:

"123 xx" 

Es scheint so einfach, aber ich kann es nicht ganz herausfinden. Dies ist der nächste, den ich habe:

^\d+ ?u?n?i?t?s? 

... aber das stimmt leider auch Strings wie "123us".

Kann jemand helfen? Es ist Javascript, so dass ich durch fehlende Blick etwas begrenzt hinter/vor verfügt über ...

+0

@CodeiSir? -?, Die auch Dinge wie "123 us" übereinstimmt, die es nicht sollte ... :) – Zissou

+0

^\ d + (u (n (i (t (n)))) ?)? $ – CoderPi

+0

Siehe http://stackoverflow.com/questions/33213891/regex-for-dates-that-matches-for-every-stage-of-valid-date-entry/33215086#33215086. –

Antwort

8

Nur einige hinzufügen ():

/^\d+((u(n(i(t(s)?)?)?)?)?)?$/ 

Testing:

/^\d+((u(n(i(t(s)?)?)?)?)?)?$/.test("123 units") -> true 
/^\d+((u(n(i(t(s)?)?)?)?)?)?$/.test("123 un")  -> true 
/^\d+((u(n(i(t(s)?)?)?)?)?)?$/.test("123 ui")  -> false 
/^\d+((u(n(i(t(s)?)?)?)?)?)?$/.test("12")   -> true 
/^\d+((u(n(i(t(s)?)?)?)?)?)?$/.test("123 xx")  -> false 
+0

Danke! Sieht urkomisch aus, aber es macht den Trick. :) – Zissou

+1

Ja, tut es, nicht wahr ;-) Du könntest auch auf Platz teilen, den ersten Teil mit '\ d +' und den letzten Teil mit '" units ".indexOf (...) == 0' abgleichen . – Kenney

1

Es ist nicht gut aussehen, aber es wird die Arbeit getan ...

^(\d+((u(n(i(t(s)?)?)?)?)?)?)?$ 
+0

Sie verpasst das '$' am Ende - es entspricht auch '123 xx'. – Kenney

+0

Und ein Schließen) – CoderPi

+0

Alles fertig, danke! – Thomas

1

Demo hier: https://regex101.com/r/uC7pX1/6

/^\d+((u(n(i(t(s)?)?)?)?)?)?$/ 
+0

Passt auch zu "123units" ohne Leerzeichen. Passt nicht zu der leeren Zeichenfolge (was sicherlich ein gültiges Präfix ist). – Thomas

Verwandte Themen