在 .NET 中,我有一个简单的行,断言字符串必须仅包含字母或数字
if (str.Any(c => !char.IsLetterOrDigit(c))
{
throw new Exception();
}
问题是字符串可以是任何语言,并且某些 Unicode 字母由多个字符表示。例如,在土耳其语中,“i̇ş”包含“i”和结合上面的点来表示第一个字母。
因此,上述验证失败。我不想对不可见的 unicode 字符进行硬编码以跳过。我想要一个适用于所有语言的通用解决方案。
这个问题有什么解决办法吗?
您可以跳过从
NonSpacingMark
返回的 char.GetUnicodeCategory(c)
类别。无需硬编码任何内容。