【问题标题】:{IsGreek}, is not working for me, nor [\w{0391}-\w{03D2}]{IsGreek},对我不起作用,[\w{0391}-\w{03D2}]
【发布时间】:2010-11-01 11:18:40
【问题描述】:

我正在构建一个 asp.net Web 应用程序,我希望我的 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>

【问题讨论】:

  • 放一个示例代码,说明什么不起作用以及应该输出什么,否则您的问题可能会被关闭或无法回答。
  • 您的服务器和页面使用什么编码? UTF-8?
  • 是的。 UTF-8 用于页面。关于服务器,我还在开发中,所以一切都通过 Visual Studio 进行。
  • 根据您的示例代码,您可能需要测试超过 1 个字符。

标签: asp.net regex unicode


【解决方案1】:

正如question/answer 所暗示的,正则表达式由浏览器中的 javascript 处理,并由后端的 .NET 正则表达式类处理。

因此您必须使用与两者兼容的正则表达式,否则您可以禁用客户端验证。

【讨论】:

    【解决方案2】:

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

    我刚刚使用了这个 reg ex 并且工作得很好!!!!但老实说,我不知道使用这种方法是否有任何缺点。

    【讨论】:

      【解决方案3】:

      请注意,.NET 使用 \p{IsGreek} 表示 \p{Block:Greek_and_Coptic}not 表示 \p{Script=Greek},这是您真正需要的。这是具有欺骗性的,因为它让您认为 .NET 可以处理脚本类型,但实际上不能。

      除了 Perl 和 PCRE 之外,很少有正则表达式引擎能够理解脚本的 Unicode 属性,例如 \p{IsGreek} 或简单的 \p{Greek}。 Javascript 和 .NET 不在处理脚本的范围内。 Java 会理解 JDK7 来的脚本属性,但还没有;不过,您可以在 Java 中使用 ICU。

      This page 表示 .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
      

      这就是为什么仅仅列出块是不够的:你真的确实需要一个合适的\p{Script=Greek}\p{IsGreek} 属性。不幸的是,目前您必须更改编程语言才能获得它,我敢肯定这是不可能的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-29
        • 2019-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多