イタリア在住 - イタリアのロケールで実行
Console.WriteLine(IsNumeric("$0")) ' False
Console.WriteLine(IsNumeric("€0")) ' True
Console.WriteLine(IsNumeric("£0")) ' False
Console.WriteLine(IsNumeric("£")) ' False
これにより、常にtrueが返されます
using System.Globalization;
Console.WriteLine(MyIsNumeric("$0", NumberStyles.AllowCurrencySymbol, "en-US"))
Console.WriteLine(MyIsNumeric("€0", NumberStyles.AllowCurrencySymbol, "it-IT"))
Console.WriteLine(MyIsNumeric("£0", NumberStyles.AllowCurrencySymbol, "en-GB"))
Public Function MyIsNumeric(ByVal val as String, ByVal NumberStyle as NumberStyles, cName as String) as Boolean
Dim result as Double
return Double.TryParse(val,NumberStyle, new CultureInfo(cName), result)
End Function
したがって、現在のロケール通貨記号が入力文字列の前後にある場合、IsNumeric (元々は VB6 ランタイムで定義されていた) でsmart
、現在のロケール通貨記号を解析から除外するのに十分であると結論付けることができます。