Regexp pour une chaîne de contenir seulement des lettres , des nombres et de l'espace en Java
Exigence: Chaîne doit contenir que des lettres , des nombres et de l'espace.
J'ai passer un propre nom à une autre API.
Mise En Œuvre: Java
Je suis venu avec cette pour mon exigence
public static String getCleanFilename(String filename) { si (nom de fichier == null) { return null; } de retour nom de fichier.replaceAll("[^A-Za-z0-9 ]",""); }
Cela fonctionne bien pour quelques-uns de mes cas de test , mais vous voulez savoir ai-je raté une des conditions aux limites, ou une meilleure façon (de la performance) pour le faire.
Si vous êtes à la valider un nom de fichier, vous ne devriez pas être modifier.
Alors, que feriez vous souhaitez utiliser pour
Ce sera presque certainement pisse les utilisateurs. Simplement détecter le négatif et de laisser l'utilisateur de savoir ce qu'ils peuvent et ne peuvent pas entrer.
Exigence est , j'ai passer un propre nom à l'autre de l'API. (si la modification est requise)
peut-être l'utilisation de la non-parole motif
Alors, que feriez vous souhaitez utiliser pour
"____"
.Ce sera presque certainement pisse les utilisateurs. Simplement détecter le négatif et de laisser l'utilisateur de savoir ce qu'ils peuvent et ne peuvent pas entrer.
Exigence est , j'ai passer un propre nom à l'autre de l'API. (si la modification est requise)
peut-être l'utilisation de la non-parole motif
\W
il contient un trait de soulignement. voir ici download.oracle.com/javase/1.4.2/docs/api/java/util/regex/...OriginalL'auteur sat | 2011-02-14
Vous devez vous connecter pour publier un commentaire.
À la réponse que vous êtes à la question directe,
\t
d'échec de votre méthode et passe à travers "l'espace". Interrupteur à\s
([...\s]
et vous êtes bon.En tout cas, votre conception est probablement défectueux. Au lieu d'arbitraire, dicking avec la saisie de l'utilisateur, permettent à l'utilisateur de savoir ce que vous ne voulez pas autoriser et faire la correction manuelle.
EDIT:
Si le nom de fichier n'est pas grave, prenez le SHA-2 hash du nom de fichier et l'utiliser. Garanti pour répondre à vos exigences.
Je suis en utilisant un nom de fichier.replaceAll("[^A-Za-z0-9\\s]",""); maintenant.
OriginalL'auteur Stefan Kendall
Supplémentaires pour les commentaires: je ne pense pas que la performance est un problème dans un scénario où la saisie de l'utilisateur est pris (et un nom de fichier ne devrait pas être long...).
Mais en ce qui concerne votre question: vous pouvez réduire le nombre de remplacements par l'ajout d'un supplément de + dans votre regex:
[^A-Za-z0-9 ]+
[A-Za-z]
, et les Chiffres ne sont pas[0-9]
.OriginalL'auteur Howard