French/Portuguese 正则表达式中的扩展 ASCII 符号

French/Portuguese extended ASCII symbols in regex

我需要编写一个编辑控件掩码,它应该接受 [a-zA-Z] 字母以及扩展的法语和葡萄牙语符号,如 [ùàçéèçǵ]。掩码应接受大写和小写符号。 如果找到两条建议:

[\p{L}] 

[a-zA-Z0-9\u0080-\u009F]

这样的正则表达式的正确写法是什么?

更新: 我的问题是关于形成一个应该匹配(而不是过滤)法语和葡萄牙语字符的正则表达式,以便在编辑控件中显示它。不区分大小写的解决方案对我没有帮助。 [\p{L}] 似乎是一个 Unicode 字符 class,我需要一个 ASCII 正则表达式。 允许使用数字,但不允许使用 !@#$%^&*)_+}{|"?>< 等特殊字符(应进行过滤)。

我发现最有效的变体是 [a-zA-Z0-9\u00B5-\u00FF]

https://regex101.com/r/EPF1rg/2

问题是为什么 [ùàçéèçǵ] 的范围是 \u00B5-\u00FF 而不是 \u0080-\u009F ? 正如我从 CP860(葡萄牙语代码页)和 CP863(法语代码页)看到的那样,它应该在 \u0080-\u009F.

范围内

https://www.ascii-codes.com/cp860.html

谁能解释一下?

字符 [µùàçéèçÇ] 在 \u00B5-\u00FF 范围内,因为 Unicode standard says so. The "old" range (\u0080-\u009F as in the 860 portugese code page) 只是 ANSI 中可用的 128 个扩展字符的众多可能映射之一,您有时会在其中找到相同的不同代码点的字符取决于代码页)。

C# 字符串是 unicode,它的正则表达式特性也是:

如果您真的必须指定一个固定范围的字符,在 C# 中您也可以直接包含它们:

[a-zA-Z0-9µùàçéèçÇ]

或者,正如其他人已经建议的那样,使用 "letter" 匹配。因此,您不需要定义每个字母表中的字母,您也不需要自己跟上该定义的未来变化:

\p{L}

第三个有效选项可能是反转规范并仅命名您不允许允许的标点符号和控制字符。