我需要编写一个编辑控件掩码,该掩码应该接受[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
任何人都可以解释一下吗?
答案 0 :(得分:1)
字符[μùàçéèçÇ]在范围\ u00B5- \ u00FF中,因为Unicode standard says so。 “旧”范围(860 portugese code page中的\ u0080- \ u009F)只是ANSI中可用的128个扩展字符的许多可能映射之一,您有时会在不同的代码点找到相同的字符,具体取决于代码页)。
C#字符串是unicode,其正则表达式功能也是如此: https://stackoverflow.com/a/20641460/1132334
如果你真的必须指定固定范围的字符,那么在C#中你也可以按字面意思包含它们:
[a-zA-Z0-9µùàçéèçÇ]
或者,正如其他人已经建议的那样,使用“字母”匹配。因此,您不应该定义每个字母表中的字母,并且您不需要自己跟上该定义的未来变化:
\p{L}
第三个有效选项可能是反转规范并仅命名标点符号并控制不允许的字符。