2

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

[\p{L}] 

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

编写这样一个正则表达式的正确方法是什么?

更新:我的问题是关于形成一个应该匹配(而不是过滤)法语和葡萄牙语字符的正则表达式,以便在编辑控件中显示它。不区分大小写的解决方案对我没有帮助。[\p{L}] 似乎是一个 Unicode 字符类,我需要一个 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

谁能解释一下?

4

1 回答 1

1

字符 [µùàçéèçÇ] 在 \u00B5-\u00FF 范围内,因为Unicode 标准是这样说的。“旧”范围(在860 葡萄牙语代码页中的 \u0080-\u009F )只是 ANSI 中可用的 128 个扩展字符的许多可能映射之一,有时您会在不同的代码点找到相同的字符,具体取决于代码页) .

C# 字符串是 unicode,它的正则表达式功能也是如此: https ://stackoverflow.com/a/20641460/1132334

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

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

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

\p{L}

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

于 2017-07-20T11:05:21.603 回答