/ / Java Regex - Keine leere Zeichenfolge, nur Zahlen, 8 Zeichen lang [closed] - Java, Regex

Java Regex - Nicht eine leere Zeichenfolge, nur Zahlen, 8 Zeichen lang [geschlossen] - Java, Regex

Ich versuche einen Regex zu konstruieren, der im Grunde nur Zahlen erlaubt, die 8 Zeichen lang sind und nicht leer sein dürfen, dh "" oder 8 Leerzeichen haben

Ich habe zwei getrennte Regex bekommen, die fast das machen, was ich danach tue: ^ (?! s * $). + Das erlaubt keine leeren Zeichenketten, erlaubt aber Leerzeichen. Ebenfalls: ^ [0-9] + $ das lässt mich nur nach Zahlen suchen.

Ich möchte diesen Regex-Ausdruck und auch und in einer Klausel kombinieren, um Zeichenfolgen zu finden, die 8 Zeichen lang sind.

Irgendwelche Ratschläge, wie ich das, was ich bisher habe, kombinieren könnte?

Antworten:

6 für die Antwort № 1

Einfach platzieren ^(?!s*$) am Anfang Ihrer Regex. Versuchen Sie es auf diese Weise ^(?!s*$)[0-9s]{8}$?

  • ^(?!s*$) Wie Sie wissen, wird geprüft, ob der gesamte String nicht nur Leerzeichen enthält
  • [0-9s] passt zu jeder Ziffer und Leerstelle
  • {8} bedeutet genau 8 Vorkommen eines Elements davor (in unserem Fall Ziffer oder Leerzeichen)

2 für die Antwort № 2

Kann nicht wirklich verstehen, wie der String 8 Zeichen lang sein kann und nur Ziffern und Leerzeichen enthält. Wenn Sie jedoch nur 8 Ziffern suchen, versuchen Sie es mit diesem:

^d{8}$

1 für die Antwort № 3

Sie können einen Quantifizierer angeben, der sicherstellt, dass Ihr Muster mit einer bestimmten Anzahl von Ziffern übereinstimmt. ^[0-9]{8}$.

Bearbeiten: Hm, ich habe den Teil über Leerraum vorher falsch verstanden. Ist es in Ordnung, dass Leerzeichen in der Zeichenfolge vorhanden sind, oder nur um sie herum? Wenn erstere, muss ich meine Antwort noch einmal überarbeiten ^ und $.

Edit v2: Pshemo hat den Tag.


0 für die Antwort № 4

Zuerst eine Längenprüfung der Zeichenfolge durchführen, um zu sehen, ob sie acht Zeichen lang ist.

Trimmen Sie dann (um Leerzeichen am Anfang und Ende zu entfernen) und passen Sie ihn an d+(s+d+)*:

// No need to anchor the regex since we use .matches()
return input.length() == 8 && input.trim().matches("\d+(\s+\d+)*");

0 für die Antwort № 5

^ [d | s] {8} $

oder in Java ...

String re = "^[\d|\s]{8}$";