长度验证
''' <summary>
''' 文字列の桁数(Shift-JISでのバイト数)を取得する。
''' </summary>
''' <param name="s">入力された文字列。</param>
''' <returns>文字列の桁数</returns>
''' <remarks></remarks>
Public Shared Function GetLength(ByVal s As String) As Integer
If Not IsInput(s) Then
Return 0
End If
Return CRGaugeCode.DefaultEncoding.GetByteCount(s)
End Function
'名称の桁数チェック
If (GetLength(newName) > maxNameLength) Then
Return False
End If
-----------------------------------------------------------------------------------------------
整数
Public Shared Function IsInteger(ByVal s As String) As Boolean
If Not IsInput(s) Then
Return True
End If
'カンマ区切りに対応するため、Decimalでチェックする
If s.Contains("."c) Then
Return False
End If
Dim d As Decimal
If Not Decimal.TryParse(s, d) Then
Return False
End If
Return CDec(Integer.MinValue) <= d And d <= CDec(Integer.MaxValue)
End Function
-----------------------------------------------------------------------------------------------------
数字
''' <summary>
''' 数値チェックの結果を表すEnum。
''' </summary>
''' <remarks></remarks>
Public Enum NumericCheckCode
Empty = 0 '未入力
Numeric = 1 '数値(または整数値)
NotNumeric = 2 '非数値(または非整数値)
Overflow = 3 '範囲外の数値
End Enum
''' <summary>
''' 文字列がDouble型で表せる整数値かどうかを判定する。
''' </summary>
''' <param name="s">入力された文字列。</param>
''' <returns>文字列が数値か否かを列挙型で返す。 未入力/整数値/非整数値/オーバーフロー</returns>
''' <remarks></remarks>
Public Shared Function IsIntegralDouble(ByVal s As String) As NumericCheckCode
If Not IsInput(s) Then
Return NumericCheckCode.Empty
End If
Try
Dim d As Double = Double.Parse(s)
If Double.IsNaN(d) Or Double.IsInfinity(d) Then
'変換は成功したが、非数や無限大の場合
Return NumericCheckCode.NotNumeric
ElseIf Math.Truncate(d) = d Then
'整数値の場合
Return NumericCheckCode.Numeric
Else
'小数値の場合
Return NumericCheckCode.NotNumeric
End If
Catch ex As FormatException
'フォーマットエラー
Return NumericCheckCode.NotNumeric
Catch ex As OverflowException
'オーバーフロー
Return NumericCheckCode.Overflow
End Try
End Function
-----------------------------------------------------------------------------------------
日期格式
'区切り文字無しの日付の形式
Private Const DATE_PATTERN As String = "yyyyMM"
'区切り文字有りの日付の形式
Private Const DELIMITED_DATE_PATTERN As String = "yyyy/M"
'日付の最小値
Private Shared ReadOnly minDate As New DateTime(1900, 1, 1)
'日付の最大値
Private Shared ReadOnly maxDate As New DateTime(2999, 12, 31)
s="201502"
pattern="yyyyMM"
If Not Date.TryParseExact(s, pattern, CultureInfo.CurrentCulture, DateTimeStyles.None, d) Then
Return False
End If
-----------------------------------------------------------------------------------------------------------
合法文件名
http://dobon.net/vb/dotnet/string/regexismatch.html#filepath
207

被折叠的 条评论
为什么被折叠?



