Java-Regex pour le nom complet


Comment puis-je valider regex pour le nom complet? Je ne veux que des alphabets (pas de chiffres) et seulement des espaces pour l'expression régulière. C'est ce que j'ai fait jusqu'à présent. Voulez-vous m'aider à réparer l'expression régulière? Merci beaucoup

public static boolean isFullname(String str) {
    boolean isValid = false;
    String expression = "^[a-zA-Z][ ]*$"; //I know this one is wrong for sure >,<
    CharSequence inputStr = str;
    Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(inputStr);
    if (matcher.matches()) {
        isValid = true;
    }
    return isValid;
}
Author: nhahtdh, 2011-09-09

6 answers

Ce problème d'identification des noms est très centré sur la culture, et il n'a vraiment aucun espoir de fonctionner de manière fiable. Je recommanderais vraiment contre cela, car il n'y a AUCUNE forme canonique pour ce qui compose le nom d'une personne dans n'importe quel pays, n'importe où sur Terre que je connaisse. Je pourrais légalement changer mon nom en #&*∫Ω∆ Smith, et cela ne rentrera dans l'algorithme de personne. Ce n'est pas que cet exemple spécifique soit quelque chose que beaucoup de gens font, mais beaucoup de gens ne pensent pas en dehors de la table ASCII lorsque l'on considère l'entrée de données, et cela va conduire à des problèmes.

Vous pouvez contester la probabilité que cela se produise, mais dans un monde global, il est de plus en plus improbable que TOUS vos utilisateurs aient des orthographes translittérées en anglais pour leurs noms. Il est également très possible que vous ayez des utilisateurs de cultures qui n'ont pas de concept de prénom/nom. Ne supposez pas que, même si votre application ne s'exécute que dans un pays donné, certains de vos utilisateurs ne le seront pas d'autres endroits (les gens se déplacent d'un pays à l'autre tout le temps, et certains d'entre eux pourraient vouloir utiliser votre logiciel).

Protégez votre application contre l'injection SQL pour des champs tels que celui-ci (si vous les stockez dans une base de données), et laissez-le là.

 22
Author: jefflunt, 2014-07-29 20:42:26

Cette méthode valide le nom et renvoie false si le nom n'a rien ou a des chiffres ou des caractères spéciaux:

public static boolean isFullname(String str) {
    String expression = "^[a-zA-Z\\s]+"; 
    return str.matches(expression);        
}
 7
Author: Ahmed El Reweny, 2014-02-10 07:45:07

Ce Qui A Été Demandé Pour

Au Lieu de "^[a-zA-Z][ ]*$" vous voulez "^[a-zA-Z ]*$". Il y a des réponses qui font référence à \s mais vous ne les voulez pas car elles vous donnent d'autres espaces blancs comme des onglets.

Exemples communs supplémentaires

Sur une note de côté, il y a des prénoms et des noms de famille qui contiennent des hypènes, comme Mary-Ann pour un prénom ou un nom de famille avec un trait d'union comme Jones-Garcia. Il y a aussi des noms de famille qui ont des points, comme St. Marc. Enfin, vous avez ' dans certains noms de famille comme O'Donnel.

Note De Côté

Légalement, vous pouvez changer votre nom Peu de Bobby supprimer des Tables... ou inclure d'autres caractères aléatoires... mais je ne sais pas combien de systèmes accueillent vraiment des choses comme ça.

Si vous voulez la casse générale (dans le monde entier), ne limitez pas les champs par n'importe quel type de caractère, car vous pouvez avoir des noms en lettres grecques, en lettres cyrilliques, en lettres chinoises, etc. Il y a aussi des caractères d'accent non anglais et d'autres des choses comme l'allemand tréma.

Si vous êtes préoccupé par l'injection SQL, utilisez des requêtes paramétrées au lieu de requêtes dynamiques.

Solution Suggérée

Si vous ne vous inquiétez que des lettres anglaises et que vous souhaitez utiliser une expression régulière qui gère les exemples de cas ci-dessus, vous pouvez utiliser "^[a-zA-Z \-\.\']*$"

 2
Author: James Oravec, 2016-01-28 17:28:08

[A-Z] correspond à une seule lettre majuscule (première lettre du nom)

[a-z]* faites correspondre n'importe quel nombre de petites lettres (autres lettres ou nom)

(\s) match 1 caractère espace (l'espace entre les noms)

+ une ou plusieurs des expressions précédentes (pour correspondre à plus d'un nom)

, Tous ensemble:

- matches first names / lastname -
^([A-Z][a-z]*((\s)))+[A-Z][a-z]*$

Ou pour correspondre à des noms comme DiMaggio St.Croix, O'Reilly et Le-Pew. Vous pouvez ajouter des caractères similaires comme le ' ᶜ ' dans MᶜKinley que vous souvenez-vous d'eux ou rencontrez des personnes avec ces caractères moins communs dans leur nom

^([A-z\'\.-ᶜ]*(\s))+[A-z\'\.-ᶜ]*$

 1
Author: James Webster, 2011-09-12 15:46:48
public static boolean isFullname(String str) {
    return str.matches("^[a-zA-z ]*$");
}

Cette méthode renvoie true si la chaîne ne contient que des alphabets et des espaces.

Mais il renvoie également true si la chaîne ne contient rien.

 -2
Author: Dragon8, 2011-09-09 13:53:50

Utilisez \s pour les espaces. Vous pouvez également utiliser String.matches(regex) pour tester si la chaîne correspond à une expression régulière.

public static boolean isFullname(String str) {
    String expression = "^[a-zA-Z\\s]*$"; 
    return str.matches(expression);        
}
 -2
Author: dogbane, 2011-09-09 13:54:15