• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Проверка поля с типом Number

  • Автор темы oxystile
  • Дата начала

Eugen

Green Team
22.03.2012
210
1
BIT
1
День добрый.
Есть поле number. Мне надо чтобы если пользователь вводит цифры, то ничего не происходит, а если вводит буквы, то поле просто чистится и пользователю месседж.
В хэлпе написано, что @IsNumber(имя_поля) вернет 1, если в поле записаны цифры.
Пробую так на Input Validation:
@If(@IsNumber(имя_моего_поля)="1";@Success;@Failure("Введите цифры."))
В итоге что бы я ни ввел, он в любом случае выдает месседж. Что не так?
 
Последнее редактирование модератором:
H

hosm

кавычки. Лучше вообще ="1" убрать.
Return value
flag
Boolean
Returns 1 (True) if the value is a number or a number list
Returns 0 (False) if the value is not a number or a number list
 

erdi

Green Team
20.08.2008
264
17
BIT
0
@If(@IsNumber(@ThisValue)=1;@Success;@Failure("Введите цифры."))
 

Leoric

Lotus Team
15.10.2003
68
9
BIT
24
@IsNumber сама по себе возвращает булево значение. Хватит и @If(@IsNumber(@ThisValue);@Success;@Failure("Введите цифры."))

Но полагаю проблема не в этом. Изменитt тип поля на Number, пока у вас значение является текстом @IsNumber вернет всегда False. Если надо текстовое поле, куда можно вводить только цифры — можно пробовать @If(@IsNumber(@TextToNumber(@ThisValue));@Success;@Failure("Введите цифры."))

P.S. не проверял, пишу по памяти
 

Eugen

Green Team
22.03.2012
210
1
BIT
1
Мне нужно чтобы в поле типа Number можно было ввести только цифры.
Все заработало, вот в таком варианте:
@If(@IsNumber(@ThisValue)=1;@Success;@Failure("Введите цифры."))

Просто пока экспериментировал, забыл, что поменял тип поля на текст. Правда если немного дописать, вот так

@If(@IsNumber(@ThisValue)=1;@Success;@Do(@Failure("Введите цифры.");FIELD имя_поля:=""))

то поле не чистится и выдается стандартная ошибка - что то вроде incorrect field value.
 

Мыш

Lotus Team
12.02.2008
1 220
29
BIT
69
Эммм, а поле типа Number разве "само себя" не проверяет (без всяких Validation)?
 

Leoric

Lotus Team
15.10.2003
68
9
BIT
24
Оно проверяет, и плюется стандартной ошибкой о несответствии типов. Инпут валидэйшн надо когда хочется своё сообщение :rolleyes: но как сделать чтобы еще и очищалось на собаках, я не знаю. =)
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
извращаться с текстом + яваскрипт
 

Kizarek86

Green Team
20.07.2007
871
7
BIT
39
Покрутите события поля
Entering
Exiting
в совокупности с проверками на собаках дает вполне премлимые результаты)
 
A

alexas

Если поле - Number и надо на собаках, то в Input Translation:
@If(@ThisValue = "";@Return("");"");
@If(@IsNumber(@ThisValue)=@False;@Do(@Prompt([ok];"";"Введите цифры.");"");@ThisValue)
Все.

Но по мне, лучше, все-таки, хранить номер в текстовом поле и перед применением - конвертировать, а проверки, форматирования, преобразования и вычисления делать в onChange на LS или JS .
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
181
Зачем? Это только очень крайний и спорный случай.

Вы все верно написали в Input Translation, а с какой формулой это от задачи зависит.
Если формат какой-то нужен, типа 000012558, то все проще: @Right("000000000" + @ThisValue;9)
Тут только ограничение в длине цифрового кода и тип поля Text
 
A

alexas

Зачем? Это только очень крайний и спорный случай.

Мне так удобно:
1 Вся работа с полем - в одном событии onChange, а не разбросана по Транслейшинам, Валидейшинам, Екзитингам и т.п.
2 Весь код перед глазами
3 Я знаю, что всегда все поля текстовые (за редким исключением) - важно для формул колонок видов
4 LS JS гибче собак (хоть и медленнее)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!