![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проверка 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?