【问题标题】:How can I create an alphanumeric Regex for all languages?如何为所有语言创建字母数字正则表达式?
【发布时间】:2011-10-05 06:32:42
【问题描述】:

我今天遇到了这个问题:

此正则表达式仅匹配英语:[a-zA-Z0-9]

如果我需要支持这个世界上的任何语言,我应该写什么正则表达式?

【问题讨论】:

    标签: regex unicode language-agnostic non-english


    【解决方案1】:

    如果您使用字符类速记和支持 Unicode 的正则表达式引擎,您可以做到这一点。 \w 类匹配“单词字符”(字母、数字和下划线)。

    当心一些不那么好的正则表达式风格:JavaScript 使用 ASCII 表示 \d(数字)和 \w,但 Unicode 表示 \s(空白)。 XML 则相反。

    【讨论】:

    • 这在很大程度上取决于您使用的语言/正则表达式语法。 [[:alpha:]] 可能更标准。
    • 如果我不想要数字?
    【解决方案2】:

    字母/字母:\p{L}

    号码:\p{N}

    所以对于所有语言的字母数字匹配,您可以使用:[\p{L}\p{N}]+

    我一直在寻找一种方法来用 JS 中的空格替换所有语言的所有非字母字符,并最终使用以下方法来做到这一点:

    const regexForNonAlphaNum = new RegExp(/[^\p{L}\p{N}]+/ug);
    someText.replace(regexForNonAlphaNum, " ");
    

    这里是 JS,我们需要在末尾添加 u 以使正则表达式识别 unicode,g 代表全局,因为我想要匹配所有实例,而不仅仅是单个实例。

    参考资料:

    https://www.linkedin.com/pulse/regex-one-pattern-rule-them-all-find-bring-darkness-bind-carranza/?trackingId=U6tRte%2BzTAG6O4AA3CrFmA%3D%3D

    https://www.regular-expressions.info/unicode.html

    【讨论】:

      【解决方案3】:

      支持大多数语言的正则表达式

      ^[A-zÀ-Ÿ\d-]*$

      【讨论】:

        【解决方案4】:

        下面的正则表达式是唯一对我有用的:

        "\\p{LD}+" ==> LD means any letter or digit. 
        

        如果您想从任何非字母数字字符中清除文本,您可以使用以下内容:

        text.replaceAll("\\P{LD}+", "");//Note P is capital. 
        

        【讨论】:

          猜你喜欢
          • 2014-09-11
          • 2020-03-05
          • 2016-02-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-01
          相关资源
          最近更新 更多