2013-12-17 16 views
3

У меня есть регулярное выражение:Unicode символов в Regex

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

Теперь, некоторые из клиентов имеют Fada над гласной в своей фамилии или FirstName, как следующее: Brendán

Обратите внимание на Fada над a, которую вы можете получить, удерживая alt, ctrl, а затем нажатие a.

Я попытался добавить эти символы в регулярное выражение, но получаю сообщение об ошибке, когда программа пытается скомпилировать.

Единственный способ, которым я могу позволить пользователю вводить такой символ с помощью fada, - это полностью удалить регулярное выражение, что означает, что пользователь может ввести все, что захочет.

Можно ли использовать вышеупомянутое выражение и как-то разрешить следующие символы?

á 
é 
í 
ó 
ú 
+0

Что такое ошибка компилятора? –

ответ

4

Просто для справки вам не нужно бежать выше ',. в вашем персонаже класса [], и вы можете избежать вынуждены покинуть черту -, разместив ее в начале или конце вашего класса символов.

Вы можете использовать \p{L}, который соответствует любому письму с любого языка. Смотрите пример ниже:

string[] names = { "Brendán", "Jóhn", "Jason" }; 
Regex rgx  = new Regex(@"^\p{L}+$"); 
foreach (string 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. 

или просто добавить нужные символы в класс символов [] вы хотите включить.

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

Попробуйте включение \p{L}, который будет соответствовать Юникоду "письмо". Таким образом, a и á должны соответствовать \p{L}.

Удачи вам!

+0

Это на 100% верно, я считаю. +1; http://regex101.com/r/bM5sQ0 –

0

\w (символы слова) включает символы юникода.

Так ваше выражение может быть:

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

(Замена A-Za-z с \w)

+0

Я думал то же самое, но на самом деле это не работает, как я ожидал. http://regex101.com/r/pG5kS5 –

+0

Проблема со словом character class ('\ w') заключается в том, что он соответствует множеству вещей: буквы Unicode — категории' Ll' (нижний регистр), 'Lu' (верхний регистр), 'Lt' (заголовок),' Lo' (буква, другое), 'Lm' (буква, модификатор),' Nd' (число, десятичная цифра ..., которая включает в себя больше, чем просто ASCII 0 -9) и 'Pc' (пунктуация, коннектор). –

0

Попробуйте, как показано ниже. Это поможет вам ...

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

Чтобы расширить регулярное выражение для включения гласные с острым акцентом (Fada), вы можете использовать Unicode кодовых точек.Вы должны знать об этих Юникода блоков:

Больше кода Unicode графики в http://www.unicode.org/charts/index.html#scripts, охватывающих Расширенная латиница-B, -C и -D и Latin Extended-Addional (которые должны охватывать практически все европейские языки в целом).

Итак, мы видим, что ирландское Fada гласные

  • Á является \u00C1; á - \u00E1
  • É - \u00C9; é - \u00E9
  • Í - \u00CD; í - \u00ED
  • Ó - \u00D3; ó является \u00F3
  • Ú является \u00DA; ú является \u00FA

И, таким образом, регулярное выражение должны быть расширены:

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\[email protected]#%&\'\-\s\.\,*]*$"); 
Смежные вопросы