Regexp ein string enthält nur Buchstaben , zahlen und Leerzeichen in Java
Voraussetzung: String sollte nur aus Buchstaben , zahlen und Leerzeichen.
Ich haben, um einen sauberen Namen zu einem anderen API.
Implementierung: Java
Ich hatte diese für meine Anforderung
public static String getCleanFilename(String filename) { if (filename == null) { return null; } Rückkehr mit dem Namen.replaceAll("[^A-Za-z0-9 ]",""); }
Dies funktioniert gut für einige meiner testcase , aber wissen wollen, fehlen mir irgendwelche Randbedingungen, oder einen besseren Weg (in der Leistung) zu tun.
Wenn Sie Validierung einen Dateinamen sollten Sie nicht ändern.
Also, was würden Sie wollen, zu verwenden für
Dies wird fast sicher piss off Benutzer. Nur erkennen die negativen und lassen Sie die Benutzer wissen, was Sie können und was nicht.
Voraussetzung ist jedoch , dass ich haben, um einen sauberen Namen zu einem anderen API. (weshalb eine änderung erforderlich ist)
möglicherweise verwenden Sie nicht word-Muster
Also, was würden Sie wollen, zu verwenden für
"____"
.Dies wird fast sicher piss off Benutzer. Nur erkennen die negativen und lassen Sie die Benutzer wissen, was Sie können und was nicht.
Voraussetzung ist jedoch , dass ich haben, um einen sauberen Namen zu einem anderen API. (weshalb eine änderung erforderlich ist)
möglicherweise verwenden Sie nicht word-Muster
\W
es Unterstrich enthält, wie gut. siehe hier download.oracle.com/javase/1.4.2/docs/api/java/util/regex/...InformationsquelleAutor sat | 2011-02-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beantworten Sie die direkte Frage,
\t
versagt Ihre Methode auf und übergibt als "Raum". Wechseln Sie zu\s
([...\s]
und du bist gut.Jedenfalls, Ihr design ist wahrscheinlich fehlerhaft. Statt willkürlich dicking mit Benutzer-input, lassen Sie die Benutzer wissen, was Sie nicht können und stellen Sie die Korrektur manuell.
EDIT:
Wenn der Dateiname spielt keine Rolle, nehmen Sie die SHA-2-hash der Datei und verwenden Sie diese. Garantiert, um Ihre Anforderungen zu erfüllen.
Ich bin mit dem Dateinamen.replaceAll("[^A-Za-z0-9\\s]",""); jetzt.
InformationsquelleAutor Stefan Kendall
Zusätzliche Kommentare: ich glaube nicht, dass die Leistung, die ein Problem in einem Szenario, in dem Benutzer eine Eingabe gemacht wird (und ein Dateiname sollte nicht so lang werden...).
Aber bezüglich Ihrer Frage: Sie reduzieren die Anzahl der Ersetzungen durch das hinzufügen einer zusätzlichen " + " in deiner regex:
[^A-Za-z0-9 ]+
[A-Za-z]
, und die Zahlen sind nicht[0-9]
.InformationsquelleAutor Howard