2016-08-31 4 views
1

Ich versuche, einen regulären Ausdruck zu erstellen, der einem bestimmten Zahlenmuster entspricht.Regex zum Auswerten des Zahlenmusters

Die Muster sind:

123456 1234XX 1234*

Nicht erlaubt sind: A Kombinationen wie: 1234*X oder 1234X* oder ein Mehrfaches *: 1234**

ich diesen Ausdruck schon versucht:

/^[\\+\\#\\*0-9]{0,25}[X]*$/ 

Aber hier habe ich die multiple * und 1234*X als gültige Ausdrücke.

Hat jemand eine Vorstellung von einer richtigen Lösung oder einem Weg zu einer Lösung?

Edit: Ok, ich denke, ich sollte die Regeln aufklären.

sollte die regex beliebige Zahl entsprechen:


+12345 
#1234525 

Aber auch für Saiten mit einem X in diesem anpassen.

12345X 
12345XX 
1234XXXXXX 
XXXXXX 

Die X s sollte immer am Ende der Zeichenfolge stehen.

Ein einzelnes * sollte nur am Ende des Strings erlaubt sein.

1234* 
1234556* 
1* 

Mehrere * sind nicht erlaubt. Nur eine * am Ende der Zeichenfolge.

Die Kombination X und * ist nicht erlaubt. 1234X* oder 12345*X sind nicht erlaubt.

Längenbeschränkung: 0 bis 25 Zeichen.

+0

Wie dieses '^ \ d {4} ..? $'? – Tushar

+0

Sie können verwenden:^\ d {6} | \ d {4} X {2} | \ d {4} \\ * $ –

+0

Versuchen Sie '' ~^(? =. {0,25} $) \ d + [X *] * $ ~ ''oder ['' ~^(? =. {0,25} $) \ d + [X *] {2} $ ~ ''] (https://regex101.com/ r/dZ0sP6/1), aber ich bekomme die Spezifikationen von diesen Beispielen nicht. Bitte ** klären ** die Regeln. –

Antwort

0

können Sie verwenden

'~^(?=.{0,25}$)[+#]?\d*(?:X*|\*?)$~D' 

Siehe regex demo

Dies wird die gesamte Zeichenkette 0 bis 25 Zeichen lang ist, stellen Sie sicher, und nur ein erlauben * am Ende der Zeichenfolge, und Null oder mehr X kann nur 0 oder mehr Ziffern folgen.

Einzelheiten:

  • ^ - Beginn der Zeichenfolge
  • (?=.{0,25}$) - eine positive Vorschau die gesamte Saitenlänge Überprüfung (muss 0-25 Zeichen lang sein)
  • [+#]? - Eins oder Null + oder
  • \d* - null oder mehr Ziffern
  • (?:X*|\*?) - eine nicht-einfangende Gruppe eine der beiden Alternativen 2 übereinstimmt, gefunden
    • - null oder mehr Symbole X
    • | - oder ...
    • \*? - eins oder null * Symbole
  • $ - Ende der Zeichenfolge (besser ersetzen Sie es durch \z, um sicherzustellen, dass keine neue Zeile am Ende akzeptiert wird, oder fügen Sie einfach D Modifizierer).
+1

Bitte beachten Sie, dass ich den 'D' Modifier in der Regex verwendet habe, es wird sicherstellen, dass das' $ 'mit dem Ende der Zeichenfolge übereinstimmt. Ohne diese Angabe kann '$' vor dem letzten Newline-Symbol übereinstimmen, das bei der Validierung möglicherweise nicht gut ist. Beachten Sie, dass Sie auch '$' durch '\ z' ersetzen können, um das gleiche Verhalten zu erreichen. –

+1

Ich habe Ihre Antwort abgelehnt, da Ihre Antwort ein Duplikat einer anderen Antwort ist (leider gehört das meiner). Wenn Sie der Meinung sind, dass die Antwort hilfreich ist, aber ein wenig modifiziert werden muss, dann sollten Sie darauf in einem Kommentar hinweisen (Sie wissen es besser). Ich habe aus einem bestimmten Grund einen Downvote gemacht, du hast zwei Downvotes ohne Gründe (für nur ein Gefühl der Rache) gemacht. – revo

+1

Das ist genau das, was ich meine. Sie sollten sich fragen, warum Sie zwei andere Antworten abgelehnt haben. Ich hatte einen gültigen Punkt, um einen zu werfen. Was ist dein? – revo

0

Basierend auf dem neuen Update:

^(?=.)[+#*]?\d*?(?:X+|\*)?$ 

Live demo

Erläuterung:

^   # Asserts beginnig of input string 
(?=.)  # Positive looakehad - input string length should be at least 1 
[+#*]?  # Optional symbols 
\d*?  # Optional digits (any number) 
    (?:   # Start of non-capturing group (a) 
     X+   # Any number of X 
     |   # Or 
     \*   # A single * 
    )?   # End of non-capturing group (a) - optional 
$   # End of string 
1

Soweit ich Ihre Bedürfnisse zu verstehen, würde dies die Arbeit machen:

^\d+(?:x+|\*)?$ 

Neue Version nach Frage bearbeiten:

^[+#]?\d*(?:x+|\*)?$ 
Verwandte Themen