{IsGreek}, не работает для меня, ни [\ w {0391} - \ w {03D2}] - PullRequest
1 голос
/ 01 ноября 2010

Я создаю веб-приложение asp.net и хочу использовать reg ex для моего RegularExpressionValidator только для греческого алфавита. Но, кажется, ничего не работает для меня. Я достаточно хорошо погуглил до сих пор, но ничто не помогло мне. Есть идеи?

<asp:Label runat="server" AssociatedControlID="FirstName" Text="Όνομα:"></asp:Label>
<asp:TextBox runat="server" ID="FirstName"></asp:TextBox>
<asp:RequiredFieldValidator runat="server" ID="FirstNameEmptyFieldValidator" Text="*" ControlToValidate="FirstName"></asp:RequiredFieldValidator>
<asp:RegularExpressionValidator runat="server" ValidationExpression="\p{IsGreek}" ID="GreekRegularExpressionValidator" ControlToValidate="FirstName" ErrorMessage="Το κείμενο εμπεριέχει μη ελληνικούς χαρακτήρες"></asp:RegularExpressionValidator>

Ответы [ 3 ]

3 голосов
/ 01 ноября 2010

Как указывает вопрос / ответ , регулярное выражение обрабатывается javascript в браузере и классом регулярных выражений .NET на внутреннем конце.

Так что вам нужно использоватьрегулярное выражение, совместимое с обоими, или вы можете отключить проверку на стороне клиента.

2 голосов
/ 01 ноября 2010

[Α-Ωα-ωάέήίόύ] +

Я только что использовал этот reg ex и работает просто отлично !!!!Но я хочу быть честным, я не знаю, есть ли недостатки такого подхода.

0 голосов
/ 01 ноября 2010

Имейте в виду, что .NET использует \p{IsGreek} для обозначения \p{Block:Greek_and_Coptic}, , а не для обозначения \p{Script=Greek}, что вам действительно нужно.Это обманчиво, потому что заставляет вас думать, что .NET может обрабатывать типы сценариев, но не может.

Немногочисленные движки регулярных выражений, кроме Perl и PCRE, понимают свойства сценария Unicode, такие как \p{IsGreek} или просто\p{Greek}.Javascript и .NET не входят в число тех, которые обрабатывают скрипты.Java будет понимать свойства скрипта в JDK7, но пока нет;Вы можете использовать ICU в Java для этого, хотя.

На этой странице говорится, что .NET обрабатывает свойства \p{InBlock}.Таким образом, вы могли бы создать класс символов следующим образом:

[\p{InGreek}\p{InGreekAndCoptic}\p{InGreekExtended}\p{InAncientGreekMusicalNotation}]

Однако при этом все равно будут отсутствовать эти кодовые точки, которые все считаются греческим шрифтом:

 ᴦ  7462 1D26 GREEK LETTER SMALL CAPITAL GAMMA
 ᴧ  7463 1D27 GREEK LETTER SMALL CAPITAL LAMDA
 ᴨ  7464 1D28 GREEK LETTER SMALL CAPITAL PI
 ᴩ  7465 1D29 GREEK LETTER SMALL CAPITAL RHO
 ᴪ  7466 1D2A GREEK LETTER SMALL CAPITAL PSI
 ᵝ  7517 1D5D MODIFIER LETTER SMALL BETA
 ᵞ  7518 1D5E MODIFIER LETTER SMALL GREEK GAMMA
 ᵟ  7519 1D5F MODIFIER LETTER SMALL DELTA
 ᵠ  7520 1D60 MODIFIER LETTER SMALL GREEK PHI
 ᵡ  7521 1D61 MODIFIER LETTER SMALL CHI
 ᵦ  7526 1D66 GREEK SUBSCRIPT SMALL LETTER BETA
 ᵧ  7527 1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA
 ᵨ  7528 1D68 GREEK SUBSCRIPT SMALL LETTER RHO
 ᵩ  7529 1D69 GREEK SUBSCRIPT SMALL LETTER PHI
 ᵪ  7530 1D6A GREEK SUBSCRIPT SMALL LETTER CHI
 ᶿ  7615 1DBF MODIFIER LETTER SMALL THETA
 Ω  8486 2126 OHM SIGN

Кроме того ложных негативов пропущенных, перечисленных непосредственно выше, класс символов в квадратных скобках для любого из четырех приведенных выше греческих блоков также дает следующие ложных позитивов :

 ʹ   884 0374 GREEK NUMERAL SIGN
 ;   894 037E GREEK QUESTION MARK
 ΅   901 0385 GREEK DIALYTIKA TONOS
 ·   903 0387 GREEK ANO TELEIA
 Ϣ   994 03E2 COPTIC CAPITAL LETTER SHEI
 ϣ   995 03E3 COPTIC SMALL LETTER SHEI
 Ϥ   996 03E4 COPTIC CAPITAL LETTER FEI
 ϥ   997 03E5 COPTIC SMALL LETTER FEI
 Ϧ   998 03E6 COPTIC CAPITAL LETTER KHEI
 ϧ   999 03E7 COPTIC SMALL LETTER KHEI
 Ϩ  1000 03E8 COPTIC CAPITAL LETTER HORI
 ϩ  1001 03E9 COPTIC SMALL LETTER HORI
 Ϫ  1002 03EA COPTIC CAPITAL LETTER GANGIA
 ϫ  1003 03EB COPTIC SMALL LETTER GANGIA
 Ϭ  1004 03EC COPTIC CAPITAL LETTER SHIMA
 ϭ  1005 03ED COPTIC SMALL LETTER SHIMA
 Ϯ  1006 03EE COPTIC CAPITAL LETTER DEI
 ϯ  1007 03EF COPTIC SMALL LETTER DEI

Вот почему перечисление блоков просто недостаточно хорошо: вам действительно do нужно правильное свойство \p{Script=Greek} или \p{IsGreek}.К сожалению, сейчас вам придется сменить язык программирования, чтобы получить его, но я уверен, что это невозможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...