9

私はパスワード検証ルーチンに取り組んでいますが、VB が Char.IsSymbol() チェックごとに '*' をシンボルと見なしていないことに驚いています。QuickWatch からの出力は次のとおりです。

char.IsSymbol("*")  False   Boolean

MSのドキュメントでは、IsSymbol に一致する文字は指定されていませんが、標準の数学記号がここに含まれていることを暗示しています。

すべての標準的な米国の特殊文字を一致させるための良いアイデアはありますか?

4

3 に答える 3

9

このコンテキストで記号である文字:名前空間のUnicodeCategory.MathSymbolUnicodeCategory.CurrencySymbolUnicodeCategory.ModifierSymbolおよび。これらは、それぞれ Sm、Sc、Sk、および So と指定された Unicode 文字です。他のすべての文字は を返します。UnicodeCategory.OtherSymbolSystem.GlobalizationFalse

.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.CurrencySymbol, UnicodeCategory.ModifierSymbol, UnicodeCategory.OtherSymbol
            Return True
        Case Else
            Return False
    End Select
End Function

CheckSymbolIsSymbol指定された文字の Unicode カテゴリで呼び出されます。

*はカテゴリに含まれているためOtherPunctuation(これは で確認できますchar.GetUnicodeCategory())、シンボルとは見なされず、メソッドは正しく を返しますFalse

質問に答えるには: を使用char.GetUnicodeCategory()して、キャラクターがどのカテゴリに該当するかを確認し、独自のロジックに含めるかどうかを決定します。

于 2013-02-20T13:55:49.203 に答える
0

たぶん、あなたはのコンパイラオプション「strict」を持っているでしょう。

Char.IsSymbol("*")

コンパイラエラーが発生します

BC30512: Option Strict On disallows implicit conversions from 'String' to 'Char'.

VB.NETで文字リテラルを定義するには、次のように文字列にacを追加する必要があります。

Char.IsSymbol("*"c)
于 2013-02-20T13:37:01.330 に答える