匹配外文字符的正则表达式是什么?

18

我正在开发一个欧洲客户的应用程序,他们有自己的本地字符集。

现在我需要一个正则表达式,允许使用外文字符,比如eéèêë等,但我不确定该如何做。

有什么建议吗?

4个回答

22

应该这样做吗 /^[a-zA-Z ]+$/\p{L} 因为这种方式不起作用。 - Rachel
@Rachel:你可能需要不仅仅是\p{L},因为这只会匹配字母(不包括空格、其他分隔符或数字)。确切的样式要求无法确定,除非知道你需要满足的全部需求。 - Fredrik Mörk

2

如果您想在几乎任何正则表达式引擎中匹配带有重音或变音符号的拉丁字符,请尝试:

[A-Za-zŽžÀ-ÿ]

它匹配以下"可打印和扩展ASCII字符"集合中的任何字符:

ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
ŽžÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ

匹配 {char} (ASCII 字符索引,区分大小写):

字符 索引(起始) 索引(结束)
[A-Z] 65 90
[a-z] 97 122
Ž 142 ---
ž 158 ---
[À-ÿ] 192 255

https://regex101.com/r/Xbbtm1/1 进行测试。


1

\p{L}目前还不跨浏览器。如果您经常使用它,从这里转换会给您带来极度膨胀的代码。

以下是一种简单的方法来包含非ASCII字母,而不需要添加海量的JavaScript或插件。将正则表达式中的a-zA-Z0-9或\w替换为此内容,并且不要使用u标志:

\u00BF-\u1FFF\u2C00-\uD7FF\w

在我所有的JavaScript正则表达式中插入此内容以替换a-zA-Z0-9或\w,似乎可以完成工作。我的上下文是在HTML和CSS中识别UTF-8,并且必须跨浏览器。

我无法相信它如此简单,所以正在等待被证明错误,在Firefox中搜索了一天后仍然无法使其正常工作...

我只使用日语平假名进行了测试,带有法国口音。


4
在《JavaScript权威指南》一书中,Douglas Crockford提到了一个类似的字母类[A-Za-z\u00C0-\u1FFF\u2800-\uFFFD]。它包含了所有Unicode字母,但还包括数千个不是字母的字符。如果要精确表示BMP中的字母类将非常庞大且效率低下。 - yas
@dave 很好。基本上我的上下文是为了区分 HTML 或 CSS 中不是关键字符的所有内容,以进行手动解析。因此,任何看起来奇怪的东西我都认为是内容而不是结构。例如,如果有人想要做 #(插入平假名) { (插入片假名)}="(插入片假名)"; },那么这是允许的和可以接受的。我只需要检测 #、{、}、=、" 和 ;,以便知道发生了什么,这只是普通的 ASCII 而不包含在正则表达式中。在我的情况下,这似乎有效。它是否作为 CSS 起作用并不是我的问题 - 它只需要正确解析即可。 - bob2517

0

[e\xE8\xE9\xEA\xEB] 将匹配任何一个 eéèêë


你指的是哪种字符编码? - Gumbo
扩展ASCII。很好的发现。应该编码为ASCII/ANSI(根据http://www.regular-expressions.info/reference.html)。 (虽然看起来\p{L}仍然是更好的选择。) - dlras2
"Extended ASCII不是我所知道的字符集。这至少与Windows-1252 (ew)和ISO-8859-1相匹配。" - Thanatos
http://www.asciitable.com/ 我猜这不是它的官方名称。但这是我最常遇到的。 - dlras2
没有名为“Extended ASCII”的字符集/编码;它只是一个以US-ASCII为基础的字符集/编码的术语(请参见http://en.wikipedia.org/wiki/Extended_ASCII)。我认为你所指的是代码页437(请参见http://en.wikipedia.org/wiki/Code_page_437)。 - Gumbo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接