2015-08-07 5 views
2

У меня есть проблемы с {}. Когда я получаю максимальное значение, как это {1,8}, он не работает, и теперь я не понимаю почему. Min vale is valid wellVisual Basic Excel Regular Expression {}

Private Sub Highlvl_Expression() 
Dim strPattern As String: strPattern = "[a-zA-Z0-9_]{1,8}" 
Dim strReplace As String: strReplace = "" 
Dim regEx As New RegExp 
Dim Test As Boolean 
With regEx 
    .Global = True 
    .MultiLine = True 
    .IgnoreCase = False 
    .Pattern = strPattern 
End With 
Test = regEx.Test(Highlvl.Value) 
If regEx.Test(Highlvl.Value) Then 
    MsgBox ("Validate") 
Else 
    MsgBox ("Not Validate") 
End If 
End Sub 
+1

использовать якоря 'Dim strPattern As String: strPattern ="^[a-zA-Z0-9 _] {1,8} $ "' –

ответ

1

Вы указали шаблон, который ищет от 1 до 8 буквенно-цифровых символов внутри строки. Если вы запустите регулярное выражение по 9-символьной строке "ABCDE6789" (regEx.Execute("ABCDE6789")), у вас будет 2 совпадения: ABCDE678 и 9.

Если вы хотите проверить строку, которая должна иметь минимальное или максимальное количество символов, вам нужно использовать anchors, то есть начало и конец строки утверждений ^ и $. Таким образом, использование

Dim strPattern As String: strPattern = "^[a-zA-Z0-9_]{1,8}$" 

И

.Global = False 

глобальный флаг не является необходимым, так как мы не ищем несколько матчей, но для одного или истинного ложного результата с test.

+0

Спасибо, что он работает сейчас. –