这是我的正则表达式:
我编写了一个 Xunit 测试来验证。
^([\\p{L}-|a-zA-Z0-9-_]+)$
,应该允许所有的外文字符以及数字字母。但由于某些原因,印地语字符无法匹配。我编写了一个 Xunit 测试来验证。
[Fact]
public void test()
{
var hindiChar = "इम्तहान";
var input = "12345ABCDPrüfungテスト中文테스트إسرائيل" + hindiChar;
var regex = "^([\\p{L}-|a-zA-Z0-9-_]+)$";
Assert.True(new Regex(regex).IsMatch(input));
}
如果您删除hindiChar
,测试将返回true; 但是如果您添加hindiChar
,则测试将返回false。
我认为正则表达式的一部分是适配所有外文字符,但不确定为什么它不能匹配印地语字符。
\p{L}
只匹配 BMP 平面中的字母。你想要匹配变音符号吗?添加\p{M}
。使用@"^[\p{M}\p{L}-|a-zA-Z0-9-_]+$"
。那里的|
是什么意思?请注意,字符类内部的|
匹配一个字面上的|
字符。我认为你想使用@"^[\p{L}\p{M}0-9_-]+$"
。 - Wiktor Stribiżew|
表示或
,就像这个正则表达式允许外文字符或数字。 - superninja[|]
不是一个或运算符,在这里必须去掉|
。 - Wiktor Stribiżew