web-dev-qa-db-fra.com

Java Regex pour valider le nom complet n'autorise que les espaces et les lettres

Je veux que regex ne valide que les lettres et les espaces. Fondamentalement, cela consiste à valider le nom complet. Ex: M. Steve Collins ou Steve Collins J'ai essayé cette regex. "[a-zA-Z] + \.?" Mais n'a pas fonctionné. Quelqu'un peut-il m'aider s'il vous plaît P.s. J'utilise Java. 

public static boolean validateLetters(String txt) {

    String regx = "[a-zA-Z]+\\.?";
    Pattern pattern = Pattern.compile(regx,Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(txt);
    return matcher.find();

}
29
amal

Qu'en est-il de:

  • Peter Müller 
  • François Hollande 
  • Patrick O'Brian 
  • Silvana Koch-Mehrin

La validation des noms est une question difficile, car les noms valides ne sont pas uniquement composés des lettres A à Z.

Au moins, vous devez utiliser la propriété Unicode pour les lettres et ajouter davantage de caractères spéciaux. Une première approche pourrait être par exemple:

String regx = "^[\\p{L} .'-]+$";

\\p{L} est une propriété de caractère Unicode qui correspond à tout type de lettre de n'importe quelle langue

79
stema

essayez cette regex (autorisant les alphabets, les points et les espaces):

"^[A-Za-z\s]{1,}[\.]{0,1}[A-Za-z\s]{0,}$" //regular
"^\pL+[\pL\pZ\pP]{0,}$" //unicode

Cela garantira également que DOT ne vienne jamais au début du nom.

12
Raheel Hasan

Pour ceux qui utilisent Java/Android et qui ont du mal à résoudre ce problème, essayez:

"^\\p{L}+[\\p{L}\\p{Z}\\p{P}]{0,}"

Cela fonctionne avec des noms comme 

  • José Brasão
10
Ziza

Vous pouvez même essayer cette expression ^[a-zA-Z\\s]*$ pour vérifier une chaîne composée uniquement de lettres et d'espaces (rien d'autre).

Pour moi cela a fonctionné. J'espère que cela fonctionne pour vous aussi.

Ou parcourez ce morceau de code une fois:

    CharSequence inputStr = expression;
    Pattern pattern = Pattern.compile(new String ("^[a-zA-Z\\s]*$"));
    Matcher matcher = pattern.matcher(inputStr);
    if(matcher.matches())
    {
         //if pattern matches
    }
    else
    {
         //if pattern does not matches
    }
5
Rahul Sahay

s'il vous plaît essayez cette regex (n'autorisez que les alphabets et l'espace)

"[a-zA-Z] [a-zA-Z] *"

si vous le souhaitez pour IOS,

NSString *yourstring = @"hello";

NSString *Regex = @"[a-zA-Z][a-zA-Z ]*";
NSPredicate *TestResult = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",Regex];

if ([TestResult evaluateWithObject:yourstring] == true)
{
    // validation passed
}
else
{
    // invalid name
}
4
jay

Motif regex pour ne faire correspondre que les alphabets et les espaces:  

String regexUserName = "^[A-Za-z\\s]+$";
2
Rahul Raina

N'accepte que les caractères avec espace: -  

 if (!(Pattern.matches("^[\\p{L} .'-]+$", name.getText()))) {
    JOptionPane.showMessageDialog(null, "Please enter a valid character", "Error", JOptionPane.ERROR_MESSAGE);
    name.setFocusable(true);
    }  
2
Krishnakant Kadam

Pour valider uniquement les lettres et les espaces, essayez ceci

String name1_exp = "^[a-zA-Z]+[\-'\s]?[a-zA-Z ]+$";
1
Vijay Chauhan

regarde ça.

String name validation only accept alphabets and spaces
public static boolean validateLetters(String txt) {

    String regx = "^[a-zA-Z\\s]+$";
    Pattern pattern = Pattern.compile(regx,Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(txt);
    return matcher.find();

}
0
M Manzar AbBas

Cela fonctionne pour moi avec la validation de bootstrap  

$(document).ready(function() {
$("#fname").keypress(function(e) {
var regex = new RegExp("^[a-zA-Z ]+$");
var str = String.fromCharCode(!e.charCode ? e.which : e.charCode);
if (regex.test(str)) {
 return true;
}
0
SANDEEP KHANDAY

Mon choix personnel est: ^\p{L}+[\p{L}\p{Pd}\p{Zs}']*\p{L}+$|^\p{L}+$, Où:

^\p{L}+ - Il devrait commencer par 1 ou plusieurs lettres.

[\p{Pd}\p{Zs}'\p{L}]* - Il peut contenir des lettres, des espaces (y compris les caractères invisibles), des tirets ou des traits d'union et 'dans n'importe quel ordre de 0 ou plusieurs fois.

\p{L}+$ - Il devrait se terminer par 1 ou plusieurs lettres.

|^\p{L}+$ - ou il devrait simplement contenir 1 ou plusieurs lettres (c’est fait pour supporter les noms de lettre simple).

La prise en charge des points (points) a été supprimée. En anglais britannique, elle peut être supprimée dans M. ou Mme, par exemple.

0
Nick Sikrier

Valide des valeurs telles que: "", "FIR", "FIR", "FIR LAST"

/^[A-z]*$|^[A-z]+\s[A-z]*$/
0
Alex P

@ amal. Ce code correspondra à vos besoins. Seules la lettre et l'espace entre les deux seront autorisées, pas de chiffre. Le texte commence par une lettre et peut contenir un espace uniquement. "^" indique le début de la ligne et "$" indique la fin de la ligne.

public static boolean validateLetters(String txt) {

    String regx = "^[a-zA-Z ]+$";
    Pattern pattern = Pattern.compile(regx,Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(txt);
    return matcher.find();

}
0
Sokunthaneth

Pour prendre en charge une langue telle que l'hindi pouvant contenir/p {Mark}, ainsi qu'entre les caractères de la langue. Ma solution est ^[\p{L}\p{M}]+([\p{L}\p{Pd}\p{Zs}'.]*[\p{L}\p{M}])+$|^[\p{L}\p{M}]+$

Vous pouvez trouver tous les cas de test pour cela ici https://regex101.com/r/3XPOea/1/tests

0
Rishabh876