【问题标题】:.NET Regular Expression to match any kind of letter from any language.NET 正则表达式匹配来自任何语言的任何类型的字母
【发布时间】:2010-06-01 12:52:53
【问题描述】:

我可以使用哪个正则表达式来匹配(允许)来自任何语言的任何类型的字母?

我需要匹配任何字母,包括任何变音符号(例如,á、ü、ñ) 并排除任何类型的符号(数学符号、货币符号、装饰符号、方框图字符等)和标点符号。

我将 ASP.NET MVC 2 与 .NET 4 结合使用。我已在我的视图模型中尝试过此注解

[RegularExpression(@"\p{L}*", ...

还有这个

[RegularExpression(@"\p{L}\p{M}*", ...

但客户端验证拒绝重音字符。

更新: 感谢您的所有回答。您的建议有效,但仅适用于 .NET,这里的问题是它还使用正则表达式通过 JavaScript 进行客户端验证。

我不得不去

[^0-9_\|°¬!#\$%/\\\(\)\?¡¿\+\{\}\[\]:\.\,;@ª^\*<>=&]

这是非常丑陋的,并没有涵盖所有场景,但最接近我需要的东西。

【问题讨论】:

    标签: javascript .net regex unicode asp.net-mvc-2


    【解决方案1】:

    你可以使用Char.IsLetter:

    指示指定的 Unicode 字符是否归类为 Unicode 字母。

    使用 .Net 4.0:

    string onlyLetters = String.Concat(str.Where(Char.IsLetter));
    

    在 3.5 上,String.Concat 仅包含数组,因此您还应该调用 ToArray

    【讨论】:

    • 这不回答问题,不一定是解决问题,可能是为了学习REGEX,我不知道。好吧,这可能是个问题,但他特别询问如何使用正则表达式(通过问题、标签,甚至标题)来做到这一点,这显然是可以完成的。 +1 用于解决“问题”,-1 用于不回答问题。中性。
    • @Marcelo - 仔细研究这个问题,你可能是对的。 [ 建议将其用作属性,可能无法用代码替换。
    【解决方案2】:

    您的问题更可能是因为您只需要 一个 alpha-char,因为正则表达式将匹配任何具有至少一个字符的内容。

    通过添加^ 作为前缀和$ 作为后缀,整个句子应该符合您的正则表达式。所以这个问题有效:

    ^\p{L}*$
    

    Regexbuddy 解释:

    1. ^ 在字符串的开头断言位置
    2. \p{L} 具有 Unicode 属性“字母”的字符(来自任何语言的任何字母) 2a.在零次和无限次之间,尽可能多(贪婪)
    3. $在字符串末尾断言位置

    【讨论】:

    • \p{L} 是获胜者 = "匹配来自任何语言的任何类型的字母"
    【解决方案3】:

    \p{L}* 应该匹配“来自任何语言的任何类型的字母”。它应该可以工作,我在 .NET 的 i18n-proof uppercase/lowercase recognition regex 中使用了它。

    【讨论】:

    • 那么问题可能比我想象的更具体,我会更新问题
    【解决方案4】:

    需要注意的是客户端正则表达式。它在客户端使用 javascript 正则表达式,在服务器端使用 .net 正则表达式。 Javascript 不支持这种情况。

    【讨论】:

      【解决方案5】:

      我只需要验证一个 URL,我在 .NET 中选择了这个正则表达式。

      ^[(\p{L})?(\p{M})?-]*$
      

      以任何语言的字符(可选字母或标记)开始和结束,并允许使用连字符。

      【讨论】:

        【解决方案6】:

        \w - 匹配任何字母数字字符(包括数字)

        在我的测试中它匹配:

        • ã
        • à
        • ç
        • 8
        • z

        并且没有匹配:

        • ;
        • ,
        • \

        如果您确切知道要排除的内容(例如一个小列表),您可以执行以下操作:

        [^;,\`.]

        一次匹配任何不存在的字符:

        • ;
        • ,
        • \
        • `
        • .

        希望对你有帮助!

        【讨论】:

        • @eagle 嗯.. 你是对的,至少我给出了一个替代方案。还是去看看吧
        • \w - 代表 Word。不是字母。
        • 它还匹配 OP 不想要的数字。
        • @Lukas:这是误导。 \w 匹配单个字符,而不是单词。它将匹配字母、数字和下划线。它是否只匹配 ASCII 字母或 Unicode 字母因正则表达式风格而异 - 在 .NET 中它是 Unicode。
        • @Tim_Pietzcker 实际上我只是在学习 REGEX,谢谢,这对我来说也很有用 =)
        猜你喜欢
        • 1970-01-01
        • 2014-03-29
        • 1970-01-01
        • 2014-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-27
        • 2019-12-25
        相关资源
        最近更新 更多