2009-12-18 5 views
2

J'essaie d'écrire une expression régulière qui va vérifier qu'une chaîne donnée est un nom "valide". Les chaînes de noms sont extraites d'une base de données, puis vérifiées pour voir si elles contiennent des caractères étranges. (Puisque c'est pour un système suédois, je dois encore inclure quelques caractères étranges qui sont communs dans les noms suédois.))Problème Regex en C#

Le problème est que ceci échoue chaque chaîne qu'il nourrit. Ma conjecture est que la regex n'est pas terminée correctement, et que si échoue la fin d'une chaîne. Mais je ne peux pas comprendre pourquoi.

Alors mon regex suit ressemble - et je l'ai essayé à la fois les chaînes regex dans l'exemple:

public static bool NameCheck(string name) 
    { 
     if(name == "" || name == " " || name == null) 
     { 
      return false; 
     } 

     //Regex regex = new Regex(@"/^[a-zåäöÅÄÖáéóúýíüÁÉÓÚÝÍÜ\-\.]+([---\s][a-zåäöÅÄÖáéóúýíüÁÉÓÚÝÍÜ\-\.]+)+/i"); 
     Regex regex = new Regex(@"/^[a-zåäöÅÄÖáéóúýíüÁÉÓÚÝÍÜ\-\.]+([---\s][a-zåäöÅÄÖáéóúýíüÁÉÓÚÝÍÜ\-\.]+)+$/i"); 

     return regex.IsMatch(name); 
    } 

Des preneurs?

Remarque: Je résous le problème dans mon système en séparant les chaînes avant la vérification de l'expression rationnelle afin de ne pas avoir à gérer les espaces, mais je suis curieux de savoir pourquoi l'expression régulière ne fonctionne pas.

+0

Vous ne devriez pas faire cela du tout. Et quand votre premier immigrant français arrive avec un ï dans son nom? Ou quoi d'autre. J'ai un de ces noms avec un caractère étrange et il SUIT de ne pas pouvoir entrer mon nom quand cela arrive. – erikkallen

+0

C'est l'appel des clients à la fin. Je suis d'accord avec toi cependant. C'est quand même assez compliqué, quand on essaie de garder la base de données libre de caractères étranges. (Surtout s'il n'y a pas de véritable politique pour ça non plus.) –

Répondre

5

C# expression régulière ne doit pas utiliser les "/" délimiteurs, vous devez donc utiliser la syntaxe suivante:

Regex regex = new Regex(@"^[a-zåäöÅÄÖáéóúýíüÁÉÓÚÝÍÜ\-\.]+([---\s][a-zåäöÅÄÖáéóúýíüÁÉÓÚÝÍÜ\-\.]+)+$", 
         RegexOptions.IgnoreCase); 
+0

Ils * ne doivent pas * les utiliser, en fait. C'est essentiellement une chose sed/perl/Javascript et n'a rien à voir avec les expressions régulières en général. Ou dans d'autres implémentations. – Joey

+0

Eh bien, je vais être ... J'ai effectivement essayé à un moment donné, mais n'a pas inclus le RegexOptions.IgnoreCase à la fin. Merci! –

1

[a-zåäöÅÄÖáéóúýíüÁÉÓÚÝÍÜ\-\.]

vous serez donc jamais aucun Bjørn-s ou Łukasz-es? Considéré [\w.-] et ayant ensuite la regex considérer ce que Unicode définit comme alpha-numériques? \w correspondra également à [0-9], mais vous pouvez toujours vérifier ceux qui sont dans une seconde expression régulière.

[---\s]

dire quoi? Qu'en est-il [\s-].