Caractères Unicode dans Regex

J’ai une expression régulière:

return Regex.IsMatch(_customer.FirstName, @"^[A-Za-z][A-Za-z0-9@#%&\'\-\s\.\,*]*$"); 

Maintenant, certains clients ont un fada sur une voyelle dans leur nom de famille ou leur prénom, comme suit: Brendán

Notez le fada sur le a que vous pouvez obtenir en maintenant les touches alt , ctrl et enfoncées.

J’ai essayé d’append ces caractères à l’expression régulière, mais un message d’erreur s’affiche lorsque le programme tente de comstackr.

Le seul moyen de permettre à l’utilisateur de saisir un tel caractère avec un fada est de supprimer complètement l’expression régulière, ce qui signifie que l’utilisateur peut saisir ce qu’il veut.

Existe-t-il un moyen d’utiliser l’expression ci-dessus et d’autoriser les caractères suivants?

 á é í ó ú 

Juste pour référence, vous n’avez pas besoin d’échapper à ce qui précède ',. dans votre classe de personnage [] , et vous éviterez d’échapper au tiret en le plaçant au début ou à la fin de votre classe de personnage.

Vous pouvez utiliser \p{L} qui correspond à n’importe quel type de lettre de n’importe quelle langue. Voir l’exemple ci-dessous:

 ssortingng[] names = { "Brendán", "Jóhn", "Jason" }; Regex rgx = new Regex(@"^\p{L}+$"); foreach (ssortingng name in names) Console.WriteLine("{0} {1} a valid name.", name, rgx.IsMatch(name) ? "is" : "is not"); // Brendán is a valid name. // Jóhn is a valid name. // Jason is a valid name. 

Ou simplement, ajoutez simplement les caractères souhaités à votre classe de personnage [] vous souhaitez inclure.

 @"^[a-zA-Z0-9áéíóú@#%&',.\s-]+$" 

Essayez d’incorporer \p{L} qui correspondra à une “lettre” unicode. Donc a et á doivent correspondre à \p{L} .

Bonne chance!

Pour que votre expression régulière puisse inclure des voyelles avec un accent aigu ( fada ), vous pouvez utiliser des points de code Unicode. Vous devez connaître ces blocs unicode:

  • Contrôles C0 et latin de base
  • Contrôles C1 et supplément Latin-1
  • et éventuellement Latin Extended-A

D’autres graphiques de code Unicode à l’ adresse http://www.unicode.org/charts/index.html#scripts , couvrant le latin étendu-B, -C et -D et le latin étendu-additionnel (qui devrait couvrir à peu près toutes les langues européennes dans son intégralité).

Donc, nous voyons que les voyelles fada irlandaises sont

  • Á est \u00C1 ; á est \u00E1
  • É est \u00C9 ; é est \u00E9
  • Í est \u00CD ; \u00ED
  • Ó est \u00D3 ; ó est \u00F3
  • Ú est \u00DA ; ú est \u00FA

Et ainsi votre expression régulière doit être étendue:

 Regex rx = new Regex( @"^[A-Za-z\u00C1\u00C9\u00CD\u00D3\u00DA\u00E1\u00E9\u00ED\u00F3\u00FA][A-Za-z\u00C1\u00C9\u00CD\u00D3\u00DA\u00E1\u00E9\u00ED\u00F3\u00FA0-9@#%&\'\-\s\.\,*]*$"); 

\w (caractères de mot) inclut des caractères unicode.

Donc, votre expression pourrait être:

 @"^\w[\w0-9@#%&\'\-\s\.\,*]*$" 

(Remplacement de A-Za-z par \w )

Essayez comme ci-dessous. Cela vous aidera…

 return Regex.IsMatch(_customer.FirstName, @"^[0-9A-Za-z@#%&\'\-\s\.\,ñáéíóúü]+$");