Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проверка Edit.Text


Жук ©   (2004-12-15 11:47:00) 

Как в условном операторе проверить, что введённый текст (длиной не больше 3) удовлетворяет виду "111" или "А11", где "А" - буква, а "1" - цифра ? Второй и третий символы (если они есть) - обязательно цифры.


Александр Иванов   (2004-12-15 15:48:00) [1]

Можно.


Жук   (2004-12-15 15:37:00) [2]

Александр Иванов ©   (15.12.04 15:26) [13]
Остроумно. Только можно без дополнительной переменной обойтись.


Александр Иванов   (2004-12-15 15:26:00) [3]

{$B-}
Str:=Edit1.Text;
if (Length(Str)<=0) or (not Str[1] in  ['1'..'9','А'..'Я']) or (Length(Str)<=1) or (not Str[2] in ['1'..'9']) or (Length(Str)<=2) or (not Str[3] in ['1'..'9']) then

В ключе оказывается тоже ошибся. :).


Жук   (2004-12-15 15:24:00) [4]

Думкин - прав, АП - не прав :-)
Длина действительно <=3, и код АП будет некорректно работать при длине "не 3".


Думкин   (2004-12-15 15:18:00) [5]

> [10] Anatoly Podgoretsky ©   (15.12.04 15:15)

Верно. Только не поправили. :)
Я частность указал, которая не работает. Ведь по условию длина <= 3.


Anatoly Podgoretsky   (2004-12-15 15:15:00) [6]

Думкин ©   (15.12.04 15:05) [7]
Оставлено в качестве домашнего задания. И к тому же тебя уже поправили, а если length(Edit1.Text)=0, а если больше 3 и так далее.

Допустимые значения
1. Длина строки ровно 3 символа
2. Первый символ из одного множества
3. второй и третий их другого множества

других условий не указано, вот все три условия и подлежат проверке и именно в таком порядке.


Александр Иванов   (2004-12-15 15:09:00) [7]

Забыл проверку на пустую строку.


Александр Иванов   (2004-12-15 15:07:00) [8]


{$B+}
Str:=Edit1.Text;
if (not Str[1] in  ['1'..'9','А'..'Я']) or (Length(Str)<=1) or (not Str[2] in ['1'..'9']) or (Length(Str)<=2) or (not Str[3] in ['1'..'9']) then

Мог ошибиться, но по-моему принцип тот. Т.е. вычисление логического выражения с ключем, по короткой схеме, чтобы не было выхода за границы массива(строки).


Думкин   (2004-12-15 15:05:00) [9]

а если length(Edit1.Text)=1 ?


Anatoly Podgoretsky   (2004-12-15 15:03:00) [10]

if (Edit1.Text[1] in ['1'..'9', 'А'..'Я']) and
  (Edit1.Text[2] in ['1'..'9']) and
  (Edit1.Text[3] in ['1'..'9'])
then


Жук   (2004-12-15 14:55:00) [11]

if not ((Edit1.Text[1] in ['1'..'9']) or (Edit1.Text[1] in ['А'..'Я'])) or
             not ((Edit1.Text[2] in ['1'..'9']) or (Edit1.Text[2]='')) or
             not ((Edit1.Text[3] in ['1'..'9']) or (Edit1.Text[3]=''))
            then begin

Более извращенческого кода я ещё не видел :-(
Оптимизировать можно ?


Жук   (2004-12-15 11:59:00) [12]

Блин ! Точно. Торможу просто, залез в IsCharAlphaNumeric :-)
Всем спасибо.


Reindeer Moss Eater   (2004-12-15 11:51:00) [13]

Работа со строкой как с массивом символов.
Оператор if.
Операции сравнения больше/меньше.


Anatoly Podgoretsky   (2004-12-15 11:50:00) [14]

if txt='111' or txt='A11' then
Если же это вообще любые цифры и буквы, то используй последовательное сравнение символов с помощью проверки их вхождения во множество - это операция IN


Cosinus   (2004-12-15 11:48:00) [15]

in?


Наверх

Титульная страница Поиск, карта сайта Написать письмо