web-dev-qa-db-fra.com

Java utilisant regex pour vérifier une chaîne d'entrée

g.:

String string="Marc Louie, Garduque Bautista";

Je veux vérifier si une chaîne ne contient que des mots, une virgule et des espaces. J'ai essayé d'utiliser regex et le plus proche que j'ai obtenu est le suivant:

String pattern = "[a-zA-Z]+(\\s[a-zA-Z]+)+";

mais il ne vérifie pas s'il y a une virgule ou non. Toute suggestion ?

13
Tommy Ngo

Vous devez utiliser le motif

^[A-Za-z, ]++$

Par exemple

public static void main(String[] args) throws IOException {
    final String input = "Marc Louie, Garduque Bautista";
    final Pattern pattern = Pattern.compile("^[A-Za-z, ]++$");
    if (!pattern.matcher(input).matches()) {
        throw new IllegalArgumentException("Invalid String");
    }
}

MODIFIER

Selon le commentaire astucieux de Michael, le PO pourrait signifier une seule virgule, auquel cas

^[A-Za-z ]++,[A-Za-z ]++$

Faut travailler.

26
Boris the Spider

Pourquoi pas simplement: 

"[a-zA-Z\\s,]+"
2
Petar Ivanov

Utilisez ce mieux

"(?i)[a-z,\\s]+"
1
Lpc_dark

Si vous voulez dire "quelques mots, des espaces et une seule virgule, où que ce soit", mon sentiment est de suggérer cette approche:

"^[^,]* *, *[^,]*$"

Cela signifie "Commencez avec zéro ou plusieurs caractères qui ne sont PAS (^) une virgule, puis vous pourriez trouver zéro ou plusieurs espaces, puis une virgule, puis encore une fois zéro ou plusieurs espaces, puis enfin encore zéro ou plusieurs caractères qui ne sont pas (^ ) une virgule".

0
Federico Zancan