如何为所有语言创建字母数字正则表达式?

时间:2011-07-14 11:38:17

标签: regex unicode language-agnostic non-english

我今天遇到了这个问题:

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

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

3 个答案:

答案 0 :(得分:9)

如果您使用字符类缩写和Unicode感知的正则表达式引擎,您可以这样做。 \w类匹配“单词字符”(字母,数字和下划线)。

请注意一些不能很好地执行此操作的正则表达式:JavaScript使用ASCII \d(数字)和\w,但Unicode使用\s(空格)。 XML反过来就是这样做的。

答案 1 :(得分:1)

字母/字母:\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

答案 2 :(得分:0)

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

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