Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > isWhiteSpace + isLetter на variable


Автор: Spiker 27.4.2009, 13:07
Код
Function GetNewPhrase() As String
Dim PhraseOK As Boolean
Dim ThisNewPhrase As String
Do
    ThisNewPhrase = InputBox("Key in new phrase ...(letters and any Spaces)")
        If Len(ThisNewPhrase) < 10 Then
            PhraseOK = False
            MsgBox ("Not enough letters ... ")
        ElseIf Char.IsLetter(Val(ThisNewPhrase)) Or Char.IsWhiteSpace(Val(ThisNewPhrase)) Then
            PhraseOK = True
            GetNewPhrase = UCase(ThisNewPhrase)
        Else
            MsgBox("Only letters and spaces")
        End If
Loop Until PhraseOK = True
End Function


Char.IsLetter u Char.IsWhiteSpace не работают на variable, если другой метод исполнения данной функций?

Автор: Akina 27.4.2009, 13:14
1) Задавая вопрос, следует смотреть, где, в каком разделе, его размещать.
2) Создавая код, следует смотреть, какой тип желает принимать функция.

Автор: Akina 27.4.2009, 13:15
Перемещено в VB .NET.

Автор: Spiker 27.4.2009, 13:41
идея воспроизвести этот код в VB6 

Автор: diadiavova 27.4.2009, 13:43
Цитата(Spiker @  27.4.2009,  13:07 Найти цитируемый пост)
Char.IsLetter u Char.IsWhiteSpace не работают на variable, если другой метод исполнения данной функций? 

Не понял smile 

По коду: а где гарантия, что в инпутбокс введено число?

Автор: Spiker 27.4.2009, 13:49
если я правильно вас понял..

Код

If Len(ThisNewPhrase) < 10 Then
            PhraseOK = False
            MsgBox ("Not enough letters ... ")

вначале идет проверка Inputbox'a
если меньше 10 букв сразу-же аборт
 после проверка на то что находитса в Inputbox'e

Код

ElseIf Char.IsLetter(Val(ThisNewPhrase)) Or Char.IsWhiteSpace(Val(ThisNewPhrase)) Then
            PhraseOK = True
            GetNewPhrase = UCase(ThisNewPhrase)




Пользователь вводит слово -> Проверка 
                       Минимум 10 букв(цифр) если все правильно -> проверка текста 
                                           Допустимо только буквы и пробел -> Да?
                                                                                                    Меняем все на большие буквы, ставим статус все ок.


Автор: diadiavova 27.4.2009, 14:00
Да, но функции Val должна передаваться строка, содержащая число. Если это не так, то отсюда, видимо, и ошибка. Хотя, честно говоря смысл выражения
Цитата

Char.IsLetter(Val(ThisNewPhrase)) Or Char.IsWhiteSpace(Val(ThisNewPhrase)) 

мне, лично непонятен в принципе. Функция Val, возвращает число, IsLetter иIsWhitespace принимают символ. По идее компилятор должен ругаться. Опять-таки не понятно, что за язык VB6 или VB.Net, и в любом случае не понятно почему используется разметка PHP. Кроме того: вопрос из первого поста требует разъяснения.

Автор: Spiker 27.4.2009, 14:15
Допущена ошибка, думаю как исправить. Пишет что  "Object required" и я попробовал без "Val" се-ровно ошибка
 код VB6


Run-time error '424'

Автор: diadiavova 27.4.2009, 14:18
Собственно, идея понятна. Проверку текста на соответствие шаблону надо выполнять при помощи регулярных выражений. В данном случае оно будет выглядеть примерно так
Код

[\w\s]{10,}

Если не ошибаюсь ессно. Кроме всего прочего в коде жуткие грабли, из цикла аж два раза вызываются модальные окна, при чём прекратить процесс можно только введя правилный текст. Попадётся тупой пользователь(вроде меня), который сразу не поймёт, что от него хотят, он просто не сможет закрыть окна. Это плохо. Диалоговое окно лучше сделать своё и проверять корректность ввода в нём, с возможностью отмены операции.

Добавлено через 2 минуты
Работу с регулярными выражениями в VB6 я не знаю, придётся переместить тему туда smile 

Автор: Spiker 27.4.2009, 14:22
можно по подробней как "[\w\s]{10,}" применять?

Автор: diadiavova 27.4.2009, 14:32
Это регулярное выражение. Я уже написал, что не знаю как с ними работать в VB6. В VB.Net для этого свои инструменты, да возможно, что в VB6 и синтаксис регекспов отличается. Тему я переместил в соответствующий форум, так что скоро ответят(наверно smile )

Автор: Spiker 27.4.2009, 14:35
спасибо

Автор: Akina 27.4.2009, 15:01
Значит, всё-таки на VB6 надо реализовать... тогда забываем про фенечки от фреймворков и нормально описываем задачу. Словами.

Автор: Spiker 27.4.2009, 15:03
пользователь вводит слово или фразу которая должна быть минимум 10 символов которые включать в себя большие буквы с алфавита и "пробел". Пользователь может ввести максимум 20 симвалов. Слово не должно включать в-себя не какие другие символы кроме больших букв и "пробела"

 У мена нет еще "VBScript Regular Expressions"

Автор: Akina 27.4.2009, 15:09
Вариантов реализации - масса.
Можно написать собственную проверяющую функцию (даже лучше две - первая проверяет один символ, вторая с помощью первой всю строку посимвольно). 
Можно добавить референс на Microsoft Scripting Runtime и использовать его Match.
Можно придумать ещё кучу вариантов.

PS. Формально можно и референс на фреймворк сделать - но это кривое решение, потому как даже изменение билда (не говоря уж о версии) будет приводить к ошибкам.

Автор: Spiker 27.4.2009, 15:18
я думал можно использовать проварку наподобие [A-Z ]{10,20} как в PHP

Добавлено через 1 минуту и 4 секунды
видимо функция мое лучшее решение

Добавлено через 11 минут и 19 секунд
как начать?

Автор: Akina 27.4.2009, 15:55
Что значит - как начать?

Код

const validsymbols as string = " ABC...XYZabc...xyz" ' сам допишешь

function checkstring(str as string)  as boolean
for i=1 to len(str)
  if checksymbol(mid(str,i,1)) = false then
    checkstring = false
    exit sub
  end if
next
checkstring = true
end function

function checksymbol(str as string)  as boolean
if instr(validsymbols, str)>0 then
  checksymbol = true
else
  checksymbol = false
end if
end function

Автор: Spiker 27.4.2009, 15:59
спасибо =) 
 надо будет запомнить

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)