Имя: Пароль:
1C
1С v8
Проверка символов в строке
0 88g88
 
03.02.17
15:41
Приветствую вас форумчане.
Есть строка, номер телефона. надо проверить на корректность заполнения. По формату или посимвольно.
в примере посимвольный перебор получаю цифру 7 а проверить хочу в диапазоне от 0 до 9. чтобы буквы не совали или другие символы.

Пример кода вопрос в условии "иначе если"
                СЧ = 1;
                Длина = СтрДлина(Поле1);
                
                Пока СЧ <= Длина цикл
                    ТекСимвол = Сред(Поле1,СЧ,1);
                    
                    Если (Сч = 1 и ТекСимвол = "+") Тогда
                        СЧ = СЧ + 1;
                        Продолжить;
                    ИначеЕсли Сч = 2 и (ТекСимвол = 0 или Тогда
                        СЧ = СЧ + 1;
                        Продолжить;
                    Иначе    
                        Сообщить("Поле (код страны) должен содержать значение в виде (+7)");
                        Возврат ложь;
                    КонецЕсли;
                КонецЦикла;
1 Масянька
 
03.02.17
15:45
(0) Сначала строки и до конца - перебор символов.
По счетчику (из перебора) получаешь символов и проверяешь его код.
PS Код лень писать.
2 88g88
 
03.02.17
15:48
(1) так можно и бех кода проверить на значение грубо (ТекСимвол =1,ТекСимвол =2,3 и т.д.) Умных решений нет для этого? а алфавитные символы не проверяют? серии к примеру...
3 f_vadim
 
03.02.17
15:49
регулярные выражения нужно осваивать. и потом пригодится.
4 88g88
 
03.02.17
15:49
Задача вроде пустяковая а решения найти не могу, кроме перебора.
5 Масянька
 
03.02.17
15:49
(2) Без кода - это совсем грубо. Я - не мазохист.
6 Ёпрст
 
03.02.17
15:50
Для нумера телефона или делать маску ввода в поле,
Или регуляркой проверять потом.
Если перебором, то либо

СтрНайти("0123456789",СимволТвой)>0 Тогда цифра

или Попытка Число(СимволТвой) ..в исключении - не цифра.
7 Heckfy
 
03.02.17
16:19
ИМХО сделать маску и не парить мозг.
8 88g88
 
03.02.17
16:24
(7) а пример?
9 88g88
 
03.02.17
16:28
(6) А в условии как это сделать?
10 Heckfy
 
03.02.17
16:29
В свойствах поля ввода на форме ищи Маска. Вбивай туда: +7 999 999 99 99
11 h-sp
 
03.02.17
16:37
(9) поиск во всех текстах запусти в конфе слова

0123456789

оттуда скопируй к себе. чего париться?
12 88g88
 
06.02.17
13:09
(10) маска вносит не меняемые значения в поле. Аволе должно меняться но проверяться на содержание.
13 mkalimulin
 
06.02.17
13:12
(0) В диапазоне от 0 до 9 записывается как:
>="0" и <="9"
14 nordbox
 
06.02.17
13:17
15 88g88
 
06.02.17
13:19
(13) сравнение с переменной не катит. поле изначально строка. Тип значения тоже строка. 1с материться ))))
(11) нашел проверяю.
есть такой вариант:
ДопустимыеСимволы = "0123456789";
    Для Сч = 1 по СтрДлина(Код) Цикл
        Символ = Сред(Код, Сч, 1);
        Если Не Найти(ДопустимыеСимволы, Символ) Тогда
            ОбщегоНазначения.СообщитьОбОшибке(
                НСтр("ru = 'Обнаружены недопустимые символы. Номер контракта может содержать только цифры.'"), Отказ);
            Прервать;
        КонецЕсли;
    КонецЦикла;
16 mkalimulin
 
06.02.17
13:31
(15) Ты чего-то путаешь. Строки сравниваются так же, как и числа. Я тебе по секрету скажу: они на самом деле и есть числа.
17 88g88
 
06.02.17
13:38
(16) значения 12345 по счетчику как

если СЧ >= 0 и СЧ <=9 тогда

1с говорит что сравнить не могу и веские причины. хотя в конкретном значении СЧ в этот момент к примеру "3" тип строка.
18 88g88
 
06.02.17
13:46
(13) (16) хотя тут прав возможно по причине отсутствия "" просто число писал без кавычек. Не уверен что принципиально, для 1с вроде что 9 что "9" один ***. )))
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший