私はこのような文字列を持っています:
正しい文字列
Dim value As String = "45, 2111,56, 1, 9, 99, 62,"
無効な文字列:
Dim value As String = "10.01, 12,, . , , "
この形式の文字列を無期限に評価する必要があります。正規表現は、直列で整数のみのコンマを評価します。
これは機能するはずです:
^(\d+, ?)*\d*$
カンマと次の数字の間にスペースを入れて、カンマで区切られた数字のリストを作成できます。空のリスト(空の文字列)も許可されます。
これを試してください:
Public Function test(ByVal test_strring$) As Boolean
Try
Dim pattern$ = "(?s)^(\d+\s*,\s*)+$"
' (?s)^(\d+\s*,\s*)+$
'
' Match the remainder of the regex with the options: dot matches newline (s) «(?s)»
' Assert position at the beginning of the string «^»
' Match the regular expression below and capture its match into backreference number 1 «(\d+\s*,\s*)+»
' Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
' Note: You repeated the capturing group itself. The group will capture only the last iteration. Put a capturing group around the repeated group to capture all iterations. «+»
' Match a single digit 0..9 «\d+»
' Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
' Match a single character that is a “whitespace character” (spaces, tabs, and line breaks) «\s*»
' Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
' Match the character “,” literally «,»
' Match a single character that is a “whitespace character” (spaces, tabs, and line breaks) «\s*»
' Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
' Assert position at the end of the string (or before the line break at the end of the string, if any) «$»
Return Regex.IsMatch(test_strring, pattern, RegexOptions.None)
Catch ex As Exception
MsgBox(ex.ToString)
Return False
End Try
End Function