Wofür ist das? Ich habe das böse Gefühl, dass dies eine Art Felddesinfektionsmittel ist, um beispielsweise SQL-Injection-Angriffe auf eine Website zu verhindern. Ach nein! Dies wäre nicht der richtige Weg, um das
Will
2
Sie müssen reguläre Ausdrücke verwenden.
Muhammad Imran Tariq
Antworten:
128
Pattern p = Pattern.compile("[^a-z0-9 ]", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher("I am a string");
boolean b = m.find();
if (b)
System.out.println("There is a special character in my string");
Sie müssen den richtigen Matcher und das richtige Muster importieren. import java.util.regex.Matcher; import java.util.regex.Pattern; Dieser Code eignet sich hervorragend zum Erzählen der übergebenen Zeichenfolge, die nur az und 0-9 enthält. Er gibt Ihnen keine Position des "schlechten" Zeichens oder dessen, was es ist, aber die Frage hat danach nicht gefragt. Ich denke, Regex ist eine großartige Fähigkeit für einen Programmierer, die ich beherrsche. Ich versuche es immer noch.
Jeff Porter
1
Wenn Sie das schlechte Zeichen anzeigen möchten, können Sie m.group () oder m.group (Index) verwenden
AITAALI_ABDERRAHMANE
Auf diese Weise können Sie alphanumerisch validieren. Wenn Sie Reg Ex ein wenig wie => [^ az] aktualisieren, werden nur Alpha-Zeichen überprüft.
Krishna Kumar Chourasiya
24
Mit dem folgenden Code können Sie Sonderzeichen aus Zeichenfolgen erkennen.
import java.util.regex.Matcher;
import java.util.regex.Pattern;
publicclassDetectSpecial{
publicintgetSpecialCharacterCount(String s){
if (s == null || s.trim().isEmpty()) {
System.out.println("Incorrect format of string");
return0;
}
Pattern p = Pattern.compile("[^A-Za-z0-9]");
Matcher m = p.matcher(s);
// boolean b = m.matches();boolean b = m.find();
if (b)
System.out.println("There is a special character in my string ");
else
System.out.println("There is no special char.");
return0;
}
}
Wenn mit "abc" verglichen wird, ergibt sich true, aber wenn mit "" verglichen wird, wird false angegeben.
Rahul Rastogi
21
Wenn Sie Buchstaben, Sonderzeichen und Zahlen in Ihrem Passwort mit mindestens 8 Ziffern haben möchten, verwenden Sie diesen Code, er funktioniert einwandfrei
Das ist nicht zuverlässig! Es wird nur nach gesucht a-zA-Z0-9. Versuchen Sie, dies mit der 123%#@ABCEingabe zu vergleichen. Es gibt true zurück.
R So
@ RSun Das würde false zurückgeben
stepanian
9
Wie nennt man genau "Sonderzeichen"? Wenn Sie etwas wie "alles, was nicht alphanumerisch ist" meinen, können Sie die Klasse org.apache.commons.lang.StringUtils (Methoden IsAlpha / IsNumeric / IsWhitespace / IsAsciiPrintable) verwenden.
Wenn es nicht so trivial ist, können Sie einen regulären Ausdruck verwenden, der die genaue Zeichenliste definiert, die Sie akzeptieren, und die Zeichenfolge damit vergleicht.
Schauen Sie sich die java.lang.CharacterKlasse an. Es gibt einige Testmethoden, und Sie finden möglicherweise eine, die Ihren Anforderungen entspricht.
Es ist viel sicherer, eine Liste akzeptabler Zeichen zu erstellen und dies zu überprüfen.
Chris Nava
2
Pattern p = Pattern.compile("[\\p{Alpha}]*[\\p{Punct}][\\p{Alpha}]*");
Matcher m = p.matcher("Afsff%esfsf098");
boolean b = m.matches();
if (b == true)
System.out.println("There is a sp. character in my string");
else
System.out.println("There is no sp. char.");
Besuchen Sie jedes Zeichen in der Zeichenfolge, um festzustellen, ob sich dieses Zeichen in einer schwarzen Liste von Sonderzeichen befindet. das ist O (n * m).
Der Pseudocode lautet:
for each char in string:
ifchar in blacklist:
...
Die Komplexität kann leicht verbessert werden, indem die schwarze Liste so sortiert wird, dass Sie jede Prüfung vorzeitig beenden können. Die String-Suchfunktion ist jedoch wahrscheinlich nativer Code, sodass diese Optimierung - die im Java-Bytecode erfolgen würde - möglicherweise langsamer ist.
// Dies ist eine aktualisierte Version des Codes, den ich gepostet habe. / * Die isValidName-Methode prüft, ob der als Argument übergebene Name nicht Folgendes enthalten sollte: 1. Nullwert oder Leerzeichen 2. Jedes Sonderzeichen 3. Ziffern (0-9) Erläuterung-- - Hier ist str2 eine String-Array-Variable, die die geteilte Zeichenfolge des Namens speichert, die als Argument übergeben wird. Die Zählvariable zählt die Anzahl der auftretenden Sonderzeichen. Die Methode gibt true zurück, wenn alle Bedingungen erfüllt sind * /
publicbooleanisValidName(String name){
String specialCharacters=" !#$%&'()*+,-./:;<=>?@[]^_`{|}~0123456789";
String str2[]=name.split("");
int count=0;
for (int i=0;i<str2.length;i++)
{
if (specialCharacters.contains(str2[i]))
{
count++;
}
}
if (name!=null && count==0 )
{
returntrue;
}
else
{
returnfalse;
}
}
in der Zeile String str2 [] = name.split (""); Geben Sie ein zusätzliches Zeichen in Array an ... Lassen Sie mich anhand eines Beispiels erklären, dass "Aditya" .split ("") [, A, d, i, t, y, a] zurückgeben würde. Sie haben ein zusätzliches Zeichen in Ihrem Array. .
Die "Aditya" .split ( "") funktioniert nicht wie erwartet von saroj routray werden Sie ein zusätzliches Zeichen in String => [, A, D, i, t, y, a] erhalten.
Ich habe es geändert, siehe unten Code es funktioniert wie erwartet
publicstaticbooleanisValidName(String inputString){
String specialCharacters = " !#$%&'()*+,-./:;<=>?@[]^_`{|}~0123456789";
String[] strlCharactersArray = new String[inputString.length()];
for (int i = 0; i < inputString.length(); i++) {
strlCharactersArray[i] = Character
.toString(inputString.charAt(i));
}
//now strlCharactersArray[i]=[A, d, i, t, y, a]int count = 0;
for (int i = 0; i < strlCharactersArray.length; i++) {
if (specialCharacters.contains( strlCharactersArray[i])) {
count++;
}
}
if (inputString != null && count == 0) {
returntrue;
} else {
returnfalse;
}
}
Verwenden Sie die statische Methode der Klasse java.util.regex.Pattern. Übereinstimmungen (Regex, String obj)
Regex: Zeichen in Klein- und Großbuchstaben und Ziffern zwischen 0 und 9
String obj: String-Objekt, das überprüft werden soll, ob es Sonderzeichen enthält oder nicht.
Der boolesche Wert true wird zurückgegeben, wenn nur Zeichen und Zahlen enthalten sind. Andernfalls wird der boolesche Wert false zurückgegeben.
Antworten:
Pattern p = Pattern.compile("[^a-z0-9 ]", Pattern.CASE_INSENSITIVE); Matcher m = p.matcher("I am a string"); boolean b = m.find(); if (b) System.out.println("There is a special character in my string");
quelle
Mit dem folgenden Code können Sie Sonderzeichen aus Zeichenfolgen erkennen.
import java.util.regex.Matcher; import java.util.regex.Pattern; public class DetectSpecial{ public int getSpecialCharacterCount(String s) { if (s == null || s.trim().isEmpty()) { System.out.println("Incorrect format of string"); return 0; } Pattern p = Pattern.compile("[^A-Za-z0-9]"); Matcher m = p.matcher(s); // boolean b = m.matches(); boolean b = m.find(); if (b) System.out.println("There is a special character in my string "); else System.out.println("There is no special char."); return 0; } }
quelle
Wenn Sie Buchstaben, Sonderzeichen und Zahlen in Ihrem Passwort mit mindestens 8 Ziffern haben möchten, verwenden Sie diesen Code, er funktioniert einwandfrei
public static boolean Password_Validation(String password) { if(password.length()>=8) { Pattern letter = Pattern.compile("[a-zA-z]"); Pattern digit = Pattern.compile("[0-9]"); Pattern special = Pattern.compile ("[!@#$%&*()_+=|<>?{}\\[\\]~-]"); //Pattern eight = Pattern.compile (".{8}"); Matcher hasLetter = letter.matcher(password); Matcher hasDigit = digit.matcher(password); Matcher hasSpecial = special.matcher(password); return hasLetter.find() && hasDigit.find() && hasSpecial.find(); } else return false; }
quelle
Wenn es mit Regex übereinstimmt, enthält
[a-zA-Z0-9 ]*
es keine Sonderzeichen.quelle
a-zA-Z0-9
. Versuchen Sie, dies mit der123%#@ABC
Eingabe zu vergleichen. Es gibt true zurück.Wie nennt man genau "Sonderzeichen"? Wenn Sie etwas wie "alles, was nicht alphanumerisch ist" meinen, können Sie die Klasse org.apache.commons.lang.StringUtils (Methoden IsAlpha / IsNumeric / IsWhitespace / IsAsciiPrintable) verwenden.
Wenn es nicht so trivial ist, können Sie einen regulären Ausdruck verwenden, der die genaue Zeichenliste definiert, die Sie akzeptieren, und die Zeichenfolge damit vergleicht.
quelle
Alles hängt davon ab, was Sie unter "speziell" verstehen. In einem regulären Ausdruck können Sie angeben
Ich vermute, dass letzteres das ist, was du meinst. Wenn nicht, verwenden Sie eine [] -Liste, um genau anzugeben, was Sie möchten.
quelle
Schauen Sie sich die
java.lang.Character
Klasse an. Es gibt einige Testmethoden, und Sie finden möglicherweise eine, die Ihren Anforderungen entspricht.Beispiele:
Character.isSpaceChar(c)
oder!Character.isJavaLetter(c)
quelle
Zuerst müssen Sie die Sonderzeichen, die Sie überprüfen möchten, vollständig identifizieren.
Dann können Sie einen regulären Ausdruck schreiben und verwenden
public boolean matches(String regex)
quelle
Pattern p = Pattern.compile("[\\p{Alpha}]*[\\p{Punct}][\\p{Alpha}]*"); Matcher m = p.matcher("Afsff%esfsf098"); boolean b = m.matches(); if (b == true) System.out.println("There is a sp. character in my string"); else System.out.println("There is no sp. char.");
quelle
Das hat bei mir funktioniert:
String s = "string"; if (Pattern.matches("[a-zA-Z]+", s)) { System.out.println("clear"); } else { System.out.println("buzz"); }
quelle
Dies ist in Android 7.0 bis Android 10.0 getestet und es funktioniert
Verwenden Sie diesen Code, um zu überprüfen, ob die Zeichenfolge Sonderzeichen und Zahlen enthält:
name = firstname.getText().toString(); //name is the variable that holds the string value Pattern special= Pattern.compile("[^a-z0-9 ]", Pattern.CASE_INSENSITIVE); Pattern number = Pattern.compile("[0-9]", Pattern.CASE_INSENSITIVE); Matcher matcher = special.matcher(name); Matcher matcherNumber = number.matcher(name); boolean constainsSymbols = matcher.find(); boolean containsNumber = matcherNumber.find(); if(constainsSymbols == true){ //string contains special symbol/character } else if(containsNumber == true){ //string contains numbers } else{ //string doesn't contain special characters or numbers }
quelle
Besuchen Sie jedes Zeichen in der Zeichenfolge, um festzustellen, ob sich dieses Zeichen in einer schwarzen Liste von Sonderzeichen befindet. das ist O (n * m).
Der Pseudocode lautet:
for each char in string: if char in blacklist: ...
Die Komplexität kann leicht verbessert werden, indem die schwarze Liste so sortiert wird, dass Sie jede Prüfung vorzeitig beenden können. Die String-Suchfunktion ist jedoch wahrscheinlich nativer Code, sodass diese Optimierung - die im Java-Bytecode erfolgen würde - möglicherweise langsamer ist.
quelle
// ohne regulären Ausdruck zu verwenden ........
String specialCharacters=" !#$%&'()*+,-./:;<=>?@[]^_`{|}~0123456789"; String name="3_ saroj@"; String str2[]=name.split(""); for (int i=0;i<str2.length;i++) { if (specialCharacters.contains(str2[i])) { System.out.println("true"); //break; } else System.out.println("false"); }
quelle
// Dies ist eine aktualisierte Version des Codes, den ich gepostet habe. / * Die isValidName-Methode prüft, ob der als Argument übergebene Name nicht Folgendes enthalten sollte: 1. Nullwert oder Leerzeichen 2. Jedes Sonderzeichen 3. Ziffern (0-9) Erläuterung-- - Hier ist str2 eine String-Array-Variable, die die geteilte Zeichenfolge des Namens speichert, die als Argument übergeben wird. Die Zählvariable zählt die Anzahl der auftretenden Sonderzeichen. Die Methode gibt true zurück, wenn alle Bedingungen erfüllt sind * /
public boolean isValidName(String name) { String specialCharacters=" !#$%&'()*+,-./:;<=>?@[]^_`{|}~0123456789"; String str2[]=name.split(""); int count=0; for (int i=0;i<str2.length;i++) { if (specialCharacters.contains(str2[i])) { count++; } } if (name!=null && count==0 ) { return true; } else { return false; } }
quelle
in der Zeile String str2 [] = name.split (""); Geben Sie ein zusätzliches Zeichen in Array an ... Lassen Sie mich anhand eines Beispiels erklären, dass "Aditya" .split ("") [, A, d, i, t, y, a] zurückgeben würde. Sie haben ein zusätzliches Zeichen in Ihrem Array. .
Die "Aditya" .split ( "") funktioniert nicht wie erwartet von saroj routray werden Sie ein zusätzliches Zeichen in String => [, A, D, i, t, y, a] erhalten.
Ich habe es geändert, siehe unten Code es funktioniert wie erwartet
public static boolean isValidName(String inputString) { String specialCharacters = " !#$%&'()*+,-./:;<=>?@[]^_`{|}~0123456789"; String[] strlCharactersArray = new String[inputString.length()]; for (int i = 0; i < inputString.length(); i++) { strlCharactersArray[i] = Character .toString(inputString.charAt(i)); } //now strlCharactersArray[i]=[A, d, i, t, y, a] int count = 0; for (int i = 0; i < strlCharactersArray.length; i++) { if (specialCharacters.contains( strlCharactersArray[i])) { count++; } } if (inputString != null && count == 0) { return true; } else { return false; } }
quelle
Konvertieren Sie die Zeichenfolge in ein char-Array mit allen Buchstaben in Kleinbuchstaben:
char c[] = str.toLowerCase().toCharArray();
Dann können Sie
Character.isLetterOrDigit(c[index])
herausfinden, welcher Index Sonderzeichen enthält.quelle
Verwenden Sie die statische Methode der Klasse java.util.regex.Pattern. Übereinstimmungen (Regex, String obj)
Regex: Zeichen in Klein- und Großbuchstaben und Ziffern zwischen 0 und 9
String obj: String-Objekt, das überprüft werden soll, ob es Sonderzeichen enthält oder nicht.
Der boolesche Wert true wird zurückgegeben, wenn nur Zeichen und Zahlen enthalten sind. Andernfalls wird der boolesche Wert false zurückgegeben.
Beispiel.
String isin = "12GBIU34RT12";<br> if(Pattern.matches("[a-zA-Z0-9]+", isin)<br>{<br> System.out.println("Valid isin");<br> }else{<br> System.out.println("Invalid isin");<br> }
quelle