gpt4 book ai didi

c# - 正则表达式不匹配所有外来字符

转载 作者:行者123 更新时间:2023-11-30 22:57:54 25 4
gpt4 key购买 nike

这是我的正则表达式 ^([\\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}来匹配单词是不够的,还需要匹配变音符号。这可以通过将 \p{M} 添加到您的正则表达式来完成。请注意,默认情况下,即使是 .NET 正则表达式中的 \w 速记“word”字符类也匹配一组变音符号,\p{Mn}(标记,非间距 Unicode 字符类别),请参阅 this .NET regex reference .但是,在这里您需要 \p{M} 以允许任何变音符号。

请注意,字符类中的 | 匹配文字 | 字符,因此您需要从模式中删除 |

在我看来你使用

@"^[\p{L}\p{M}0-9_-]+$"

它将匹配任何一个或多个字母、变音符号、ASCII 数字、_- 字符的字符串。

参见 regex demo .

请注意,如果您想允许任何 Unicode 数字字符,您甚至可以使用

@"^[\w\p{M}-]+$"

参见 another demo

关于c# - 正则表达式不匹配所有外来字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53326044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com