2017-08-01 1 views
-2

Ich habe eine Anforderung String im Fall einer Validierung es hat eine führende Null, oder den Raum in jedem Teil der Schnur oder Sonderzeichen in jedem Teil der ZeichenfolgeWie erstellt man einen kombinierten Regex für keine führenden Nullen, Leerzeichen und Sonderzeichen?

zB

„0baqp d8895 & & g "

In der oben angegebenen Zeichenfolge hat die Zeichenfolge eine führende Null, ein Leerzeichen und ein Sonderzeichen. Wie kann ich diese Art von Zeichenfolge überprüfen?

gerade nur mich für die Validierung von Leer- oder Sonder Charakter oder führende Null Ergebnis liefert, aber nicht alle in einem

UPDATE

diese sind alle gültigen Strings

BAqpd441587

abcdef12345

132456abcdef

diese sind alle ungültig Strings

0abcd1324568 - weil dies eine enthält führende Null

abcdef ** & & 46588 - weil diese Sonderzeichen enthält

abcde 4568 - weil das Platz enthält

jede Hilfe wäre willkommen.

+0

Geben Sie weitere Beispiele an und zeigen Sie Ihren Versuch. – anubhava

+0

"Sonderzeichen" muss auch definiert werden, was in einem Kontext besonders ist, ist in einem anderen normal. – Aaron

+0

eigentlich bin ich nicht in der Lage, alle Regex zu erreichen, das Hauptziel, wenn ich Regex für die führende Null hinzufügen und dann Regex für den Raum, die führende Null beginnt zu scheitern, können Sie mir mit der Regex –

Antwort

2

getestet, würde ich durch Anpassen der ungültige Auswahl Validierung vorschlägt, dann auf dem Fehlen eines Spiels unter Berufung Gültigkeit zu überprüfen.

Dies liegt daran, dass ungültige Zeichenfolgen einfach definiert werden: Sie beginnen mit einer Null oder enthalten ein Sonderzeichen (oder ein Leerzeichen, das als Sonderzeichen betrachtet werden kann).

Die Regex das wäre einfach entlang der Linien von ^0|[*& ] sein, etwas zu passen (wo Sie alle aufzuzählen, die Zeichen haben, die Sie in der Zeichenklasse besondere betrachten, die derzeit nur *, & und Raum enthält).

Sie können es here versuchen, wo ich die g lobaler und m ulti-line-Flags hinzufügen musste die Regex Arbeit auf mehreren Leitungen Eingaben zu machen, die in Ihrem Fall nicht erforderlich sein sollte.

Wenn das Ergebnis der Regex danach nicht manipuliert werden kann und die Gültigkeit oder die analysierte Zeichenfolge zurückgeben muss, wird die Problemdefinition komplexer: Wir müssen jede Zeichenfolge abgleichen, die mit etwas anderem als 0 beginnt und nur Zeichen enthält sind nicht besonders (noch Raum).

In diesem Fall schlug der regex anubhava (^[^0][a-zA-Z0-9]*$) should work nicely.

Eine andere Option wäre die Verwendung eines negativen Lookahead, aber es wird erwartet, dass es weniger effizient ist: (auch in diesem Fall würden Sie alle Sonderzeichen auflisten wollen).

0

Ihre Antwort ist: ((^0.*$)|(^[\w]*[\s\W]+[\w]*$))

Hinweis: Dieser Ausdruck wird ungültige Strings MATCH. Also die Zeichenfolgen, die diese Regexp passieren, sollten Sie als ungültig betrachten.

Alle sind Ihre Beispiele Wenn möglich https://regex101.com/

+0

Ein paar Hinweise, wenn Sie Ihre Regex vereinfachen möchten, was ansonsten richtig erscheint: '\ w' ist bereits eine Zeichenklasse, es muss nicht in Klammern eingeschlossen werden; '\ W' enthält' \ s' (aber nicht '_'!), Keine Notwendigkeit, sie in einer Zeichenklasse anzugeben; Ihre Klammern werden hier nicht benötigt, obwohl sie die Lesbarkeit verbessern könnten. Sie könnten sie verwenden, um die^^ '- Anker außerhalb der Alternation zu platzieren, aber die Verankerung des zweiten Kriteriums ist nicht notwendig: In diesem Fall müssen Sie nicht alle Zeichen des Eingabetexts, nur die hypothetischen, abgleichen die übereinstimmen mit den Kriterien, wo auch immer sie im Text sind – Aaron

+0

Beachten Sie, dass Lesbarkeit in der Regel an erster Stelle steht. Wenn Sie und Ihre Kollegen Ihre Regex einfacher lesen als das Ergebnis der Anwendung meiner Notizen, dann ist Ihre Regex besser. – Aaron

+0

@Aaron, ja du hast absolut recht. Danke für den Rat. –

Verwandte Themen