微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

vb.net – Char.IsSymbol(“*”)是假的

正在进行密码验证例程,并且很惊讶地发现VB不会将’*’视为Char.IsSymbol()检查的符号.
以下是QuickWatch的输出
char.IsSymbol("*")  False   Boolean

MS documentation没有指定IsSymbol匹配的字符,但暗示标准数学符号包含在here中.

有没有人有匹配所有标准美国特殊字符的好主意?

在此上下文中为符号的字符:System.Globalization命名空间中的UnicodeCategory.MathSymbol,UnicodeCategory.CurrencySymbol,UnicodeCategory.ModifierSymbol和UnicodeCategory.OtherSymbol.这些是分别指定为Sm,Sc,Sk和So的Unicode字符.所有其他字符返回False.

来自.Net来源:

internal static bool CheckSymbol(UnicodeCategory uc)
{
    switch (uc)
    {
        case UnicodeCategory.MathSymbol:
        case UnicodeCategory.CurrencySymbol:
        case UnicodeCategory.ModifierSymbol:
        case UnicodeCategory.OtherSymbol:
            return true;
        default:
            return false;
    }
}

或转换为VB.Net:

Friend Shared Function CheckSymbol(uc As UnicodeCategory) As Boolean
    Select Case uc
        Case UnicodeCategory.MathSymbol,UnicodeCategory.ModifierSymbol,UnicodeCategory.OtherSymbol
            Return True
        Case Else
            Return False
    End Select
End Function

IsSymbol使用给定char的Unicode类别调用CheckSymbol.

由于*属于OtherPunctuation类(您可以使用char.GetUnicodeCategory()进行检查),因此它不被视为符号,并且该方法正确返回False.

要回答你的问题:使用char.GetUnicodeCategory()来检查角色属于哪个类别,并决定是否将它包含在你自己的逻辑中.

原文地址:https://www.jb51.cc/vb/255772.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐