wake-up-neo.com

Regex-Muster mit allen Sonderzeichen

Ich möchte einen einfachen regulären Ausdruck schreiben, um zu prüfen, ob in der angegebenen Zeichenfolge Sonderzeichen vorhanden sind. Mein regulärer Ausdruck funktioniert, aber ich weiß nicht, warum er auch alle Zahlen enthält. Wenn ich eine Zahl eingebe, wird ein Fehler ausgegeben.

Mein Code:

//pattern to find if there is any special character in string
Pattern regex = Pattern.compile("[$&+,:;[email protected]#|'<>.-^*()%!]");
//matcher to find if there is any special character in string
Matcher matcher = regex.matcher(searchQuery.getSearchFor());

if(matcher.find())
{
    errors.rejectValue("searchFor", "wrong_pattern.SearchQuery.searchForSpecialCharacters","Special characters are not allowed!");
}
40
Piotr Sagalara

Bitte tu das nicht ... kleiner Unicode BABY ANGEL so wie dieser ???? sterben! ← (← dies sind keine Bilder) (noch der Pfeil!)

Und du tötest 20 Jahre DOS :-) (der letzte Smiley heißt WHITE SMILING FACE ... Jetzt ist es bei 263A ... Aber in alten Zeiten war es ALT-1)

und sein Freund

BLACK SMILING FACE ... Jetzt ist es bei 263B ... Aber in alten Zeiten war es ALT-2

Versuchen Sie es mit einem negativen Treffer:

Pattern regex = Pattern.compile("[^A-Za-z0-9]");

(Dies gilt nur für A-Z "Standard" Buchstaben und "Standard" Ziffern).

108
xanatos

Sie haben einen Strich in der Mitte der Zeichenklasse, was einen Zeichenbereich bedeutet. Setzen Sie den Gedankenstrich am Ende der Klasse wie folgt:

[$&+,:;[email protected]#|'<>.^*()%!-]
19
Jerry

Das liegt daran, dass Ihr Muster einen .-^ enthält, der alle Zeichen zwischen und einschließlich . und ^ ist, die Ziffern und mehrere andere Zeichen enthalten, wie unten gezeigt:

enter image description here

Wenn Sie mit Sonderzeichen Interpunktion und Symbole verwenden, verwenden Sie:

[\p{P}\p{S}]

welche alle UnicodeSatzzeichen und Symbole enthält.

17
Sina Iravanian

Da Sie in Ihrer Charakterklasse keine Leerzeichen und Unterstriche haben, denke ich, dass die Befolgung von Regex für Sie besser ist:

Pattern regex = Pattern.compile("[^\w\s]");

Was bedeutet, dass alles andere als [A-Za-z0-9\s_] passt

Unicode-Version:

Pattern regex = Pattern.compile("[^\p{L}\d\s_]");
6
anubhava

Versuchen:

(?i)^([[a-z][^a-z0-9\\s\\(\\)\\[\\]\\{\\}\\\\^\\$\\|\\?\\*\\+\\.\\<\\>\\-\\=\\!\\_]]*)$

(?i)^(A)$: Gibt an, dass der reguläre Ausdruck A die Groß- und Kleinschreibung nicht berücksichtigt.

[a-z]: steht für ein beliebiges alphabetisches Zeichen von a bis z.

[^a-z0-9\\s\\(\\)\\[\\]\\{\\}\\\\^\\$\\|\\?\\*\\+\\.\\<\\>\\-\\=\\!\\_]: repräsentiert ein beliebiges alphabetisches Zeichen mit Ausnahme von a bis z, Ziffern und Sonderzeichen, d. h. Akzentzeichen.

[[a-z][^a-z0-9\\s\\(\\)\\[\\]\\{\\}\\\\^\\$\\|\\?\\*\\+\\.\\<\\>\\-\\=\\!\\_]]: steht für beliebige alphabetische (akzentuierte oder nicht akzentuierte) Zeichen.

*: Ein oder mehrere Vorkommen der Regex, die vor ihm liegt.

3
cdaiga

Wenn Sie sich nur auf ASCII -Zeichen verlassen, können Sie sich darauf verlassen, die Hex-Bereiche der Tabelle ASCII zu verwenden. Hier ist ein Regex, der alle Sonderzeichen im Bereich von 33-47, 58-64, 91-96, 123-126 erfasst.

[\x21-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]

Sie können sich jedoch Sonderzeichen als nicht normale Zeichen vorstellen. Wenn wir diesen Ansatz verfolgen, können Sie dies einfach tun

^[A-Za-z0-9\s]+

Wie sich dies _^ und wahrscheinlich andere nicht fängt.

3
Serguei Fedorov

Für Leute (wie ich), die nach einer Antwort für Sonderzeichen wie Ä usw. suchen, verwenden Sie einfach dieses Muster:

  • Nur Text (oder ein Leerzeichen): "[A-Za-zÀ-ȕ]"

  • Text und Zahlen: "[A-Za-zÀ-ȕ0-9]"

  • Text, Zahlen und einige Sonderzeichen: "[A-Za-zÀ-ȕ0-9 (), -_.,]"

Regex startet nur am ASCII-Index und prüft, ob ein Zeichen des Strings in beiden Indizes enthalten ist [startindex-endindex].

Sie können also einen beliebigen Bereich hinzufügen.

Schließlich können Sie mit einem praktischen Werkzeug herumspielen: https://regexr.com/

Viel Glück;)

Bitte verwenden Sie diese .. es ist am einfachsten.

\ p {Punktierung} Satzzeichen: Eine von! "# $% & '() * +, -./:; <=>? @ [] ^ _` {|} ~

https://docs.Oracle.com/javase/7/docs/api/Java/util/regex/Pattern.html

    StringBuilder builder = new StringBuilder(checkstring);
    String regex = "\\p{Punct}"; //Special character : `[email protected]#$%^&*()-_+=\|}{]["';:/?.,><
    //change your all special characters to "" 
    Pattern  pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(builder.toString());
    checkstring=matcher.replaceAll("");
2
Energy

Hier ist meine Regex-Variante eines Sonderzeichens:

String regExp = "^[^<>{}\"/|;:.,[email protected]#$%^=&*\\]\\\\()\\[¿§«»ω⊙¤°℃℉€¥£¢¡®©0-9_+]*$";

(Java-Code)

2
Chuck

Verwenden Sie dieses Muster für reguläre Ausdrücke ("^ [a-zA-Z0-9] * $"). Es überprüft die alphanumerische Zeichenfolge mit Ausnahme der Sonderzeichen 

2
sam

Verwenden Sie dies für die gleichen Dinge - StringUtils.isAlphanumeric(value)

1
Ash

Hier ist mein regulärer Ausdruck, mit dem ich alle Sonderzeichen aus einer beliebigen Zeichenfolge entfernt habe:

String regex = ("[ \\\\[email protected]  [\\\"]\\\\[\\\\]\\\\\\\0-9|^{#%'*/<()>}:`;,!& .?_$+-]+")
1

Wir können dies mit Pattern und Matcher wie folgt erreichen:

Pattern pattern = Pattern.compile("[^A-Za-z0-9 ]");
Matcher matcher = pattern.matcher(trString);
boolean hasSpecialChars = matcher.find();
0
KayV

(^\W $)

^ - Anfang der Zeichenfolge \W - entspricht einem beliebigen Nicht-Word-Zeichen [^ a-zA-Z0-9 _], $ - Ende der Zeichenfolge

0

Ich habe ein Muster für die Suche nach ASCII Sonderzeichen zwischen 032 und 126 mit Ausnahme der alphanumerischen Zeichen definiert. Sie können so etwas wie das Folgende verwenden:

m ein Sonderzeichen zu finden:

[ -\/:[email protected]\[-\`{-~]

m mindestens 1 und höchstens eine Anzahl zu finden:

(?=.*[ -\/:[email protected]\[-\`{-~]{1,})

Diese Muster haben Sonderzeichen im Bereich von 032 bis 047, 058 bis 064, 091 bis 096 und 123 bis 126.

0
Mohamed Yusuff