Frage

Ich bin kein Experte in regex, aber ich brauche etwas Eingang ich keine Kontrolle haben zu analysieren, und stellen Sie sicher, dass ich Filter alle Saiten weg, die nicht über A-z und / oder 0-9.

Wenn ich laufe dies,

Pattern p = Pattern.compile("^[a-zA-Z0-9]*$"); //fixed typo
if(!p.matcher(gottenData).matches())
       System.out.println(someData); //someData contains gottenData

bestimmte Räume + ein unbekanntes Symbol irgendwie die Filter durchrutschen (gottenData ist das rote Rechteck): Screenshot

Falls Sie sich fragen, tut es auch Text angezeigt werden, es ist nicht alles so.

Für jetzt, ich die nichts dagegen [?], Solange es auch einige Zeichenfolge enthält zusammen mit ihm.

Bitte Hilfe.

[EDIT] soweit ich aus dem (sehr groß) Eingang kann sagen, die 's sind entweder weiß Räume, die entweder gar nichts [?]; vielleicht gibt es eine Art der Codierung Problem, vielleicht auch etwas mit #text Knoten zu tun (Eingang xml)

War es hilfreich?

Lösung

Die * quantifier matches „null oder mehr“, was bedeutet, dass es eine Zeichenfolge übereinstimmen, die nicht alle Zeichen in der Klasse enthalten. Versuchen Sie, die + quantifier, das bedeutet „eine oder mehr“: ^[a-zA-Z0-9]+$ wird nur Strings, bestehend aus alphanumerischen Zeichen entsprechen. ^.*[a-zA-Z0-9]+.*$ passt auf eine beliebige Zeichenfolge, die ein oder mehrere alphanumerische Zeichen, obwohl die führenden. * wird es viel langsamer. Wenn Sie Matcher.lookingAt() statt Matcher.matches verwenden, wird es keine vollständige Zeichenfolge Spiel benötigen und Sie können die Regex [a-zA-Z0-9]+ verwenden.

Andere Tipps

Sie haben einen Fehler in Ihrer regex: statt [a-zA-z0-9]* sollte es [a-zA-Z0-9]* sein

.

Sie haben nicht ^ und $ um die regex müssen. Matcher.matches() immer passt die komplette Zeichenfolge.

String gottenData = "a ";
Pattern p = Pattern.compile("[a-zA-z0-9]*");
if (!p.matcher(gottenData).matches())
    System.out.println("doesn't match.");

Diese Drucke "doesn't match."

Die richtige Antwort ist eine Kombination der oben genannten Antworten. Zuerst stelle ich mir beabsichtigten Charakter Spiel ist [a-zA-Z0-9]. Beachten Sie, dass Az ist nicht so schlecht, wie Sie es alle Zeichen umfassen könnte denken, im ASCII-Bereich zwischen A und Z, die Buchstaben plus ein paar Extra ist (genauer gesagt [, \,], ^, _, `).

Ein zweites mögliches Problem wie Martin erwähnt ist, müssen Sie möglicherweise in der Start- und End-Qualifikation setzen, wenn Sie die Zeichenfolge wollen bestehen nur aus Buchstaben und Zahlen.

Schließlich verwenden Sie den Operator * was bedeutet 0 oder mehr, daher können Sie 0 Zeichen übereinstimmen und Spiele werden true zurück, so effektiv Ihr Muster wird jede Eingabe entsprechen. Was Sie brauchen, ist die + quantifier. Also habe ich das Muster vorlegen werden Sie wahrscheinlich suchen ist:

^ [a-zA-Z0-9] + $

Sie haben die regexp zu "^[a-zA-Z0-9]*$" ändern, um sicherzustellen, dass Sie die gesamte Zeichenkette passen

Sieht aus wie es sein sollte "a-zA-Z0-9", nicht "a-zA-z0-9", versuchen, diese zu korrigieren ...

Hat jemand denken Sie daran Hinzufügen Raum zum regex [a-zA-Z0-9 ]*. Dies sollte jeden normalen Text mit Zeichen, Zahl und Räume entsprechen. Wenn Sie möchten, Zitate und andere Sonderzeichen, sie auch zu dem regulären Ausdruck hinzuzufügen.

Sie können schnell Ihre regex testen unter http://www.regexplanet.com/simple/

Sie können Eingabewert überprüfen ist String und Zahlen enthalten sind? unter Verwendung von Regex ^ [a-zA-Z0-9] * $

, wenn Ihr Wert enthält nur numberString als seine Show Spiel das heißt, riz99, riz99z sonst wird es zeigen, nicht übereinstimmen das heißt, 99z., riz99.z, riz99.9

Beispielcode:

if(e.target.value.match('^[a-zA-Z0-9]*$')){
            console.log('match')
          }
          else{
            console.log('not match')
          }
}

online arbeiten Beispiel

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top