Имя: Пароль:
1C
1С v8
Как проверить, есть ли в строке кроме цифр буквы
,
0 i37391
 
15.12.21
13:45
Здравствуйте! Есть строка, например Стр = "А001" или Стр = "0А01" или Стр = "00А1", просто некая строка где кроме цифр есть буква. Как проверить, что строка содержит буквы?
1 pechkin
 
15.12.21
13:49
можно через попытку в число преобразовать
2 palpetrovich
 
15.12.21
13:50
цикл посимвольно с проверкой или "регулярные выражения" использовать
а вообще - вариантов куча
3 i37391
 
15.12.21
13:51
Спасибо за ответ!!!
4 youalex
 
15.12.21
13:52
в БСП есть СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке()
но там в принципе "не цифры"
5 Базис
 
naïve
15.12.21
13:55
Все 3 содержат.
С остальными строками уже нужен будет программист.
6 Обработка
 
15.12.21
13:57
Людям лень или разучились гуглить. Печаль.
7 palpetrovich
 
15.12.21
14:05
(5) эх, за бесплатно инфу слил :/
8 lEvGl
 
гуру
15.12.21
15:01
(0) похоже на шестнадцатеричную историю, нет?
9 timurhv
 
15.12.21
15:05
(2) в 1С регулярки завезли без XDTO и попыток?
10 Kassern
 
15.12.21
15:07
(9) RegExp = Новый COMОбъект("VBScript.RegExp");
11 timurhv
 
15.12.21
15:16
(10) Спасибо, но нет :)
12 timurhv
 
15.12.21
15:16
Нужно на уровне платформы
13 Pohoo
 
15.12.21
17:15
СтрокаПроверки = "А010101";

Для Сч = 1 По СтрДлина(СтрокаПроверки) Цикл
    
    ПроверяемыйСимвол = Сред(СтрокаПроверки, Сч, 1);
    
    Если Найти("0123456789", ПроверяемыйСимвол) = 0 Тогда
        //Есть не цифра
        
        Прервать;
    КонецЕсли;
    
    
КонецЦикла;
14 acht
 
15.12.21
17:20
(13) > Для Сч = 1 По СтрДлина(СтрокаПроверки) Цикл
Боян.

ЕстьНеЦифры = СтрРазделить(СтрокаПроверки, "0123456789", Ложь).Количество() > 0;
15 Kassern
 
15.12.21
17:44
Уже ведь скинули вариант проверки:
Возврат СтрДлина(
        СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить(
        СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить(
            Значение, "0", ""), "1", ""), "2", ""), "3", ""), "4", ""), "5", ""), "6", ""), "7", ""), "8", ""), "9", "")) = 0;
16 Kassern
 
15.12.21
17:45
если это число, то вернет истина
17 Pohoo
 
15.12.21
17:49
(14) Это какое-то шаманство! Я чот даже и не знал, что такая фигня есть :) Век живи, век учись. И все равно дураком помрешь :) Благодарю за изящное решение!
Тут, правда, есть один нюанс - не на всех платформах сработает.
18 acht
 
15.12.21
22:44
(15) А это как раз для старых платформ =)
19 Bigbro
 
16.12.21
04:33
Строка(Число(СокрЛП(Стр)))=СокрЛП(Стр)
20 Casey1984
 
16.12.21
09:07
(19) Вылет исключение
21 Bigbro
 
16.12.21
09:54
исключение значит не равно ))
22 Krendel
 
16.12.21
10:00
(0) нчальный курс программирования теперь и на 1с?
23 Bigbro
 
16.12.21
10:07
?(Строка(Число(СОКРЛП("101")))=СокрЛП("101"),1,0) = 1
?(Строка(Число(СОКРЛП("1а1")))=СокрЛП("1а1"),1,0) = 0
нету никаких исключений, зачем обманывать
24 Kassern
 
16.12.21
10:10
(23) начиная с какой платформы Число(СОКРЛП("1а1")) не валится с ошибкой преобразования?)
25 Bigbro
 
16.12.21
10:12
7.7 - полет нормальный.
думаю и в 7.5 тоже
26 Kassern
 
16.12.21
10:13
(25) 8ка с вами не согласна)) "Преобразование значения к типу Число не может быть выполнено"
27 Bigbro
 
16.12.21
10:15
(26) ну так, 8ка еще сырая, переходите на 7.7, тут все работает.
любая строка спокойно в число переводится обрезая все что справа начиная с первого нецифрового символа.
28 Bigbro
 
16.12.21
10:17
ну для снеговиков оберните в попытку исключение. как раз и будет признак.
29 Kassern
 
16.12.21
10:20
(27) да многие языки ругаются на подобные конструкции, тот же питон - invalid literal for int() пишет, так, что это нормальная практика. В попытку оборачивать можно, но зачем, когда можно без исключений задачу решить?
30 Bigbro
 
16.12.21
10:22
иногда вызвать исключение и обработать его на порядок быстрее чем реализовывать "честный" алгоритм.
хотя в приличных кругах за такой забросают ссаными тряпками, но приходилось и не так изгаляться, так что норм.
31 Ryzeman
 
16.12.21
10:24
(30) К приличным кругам не отношусь, но испытываю лютую ненависть к коллегам, которые решают подобные задачи через попытки) Хотя понимаю, что *иногда* это оптимальнее.
32 Bigbro
 
16.12.21
10:25
(31) блин ну не было в условиях что на 8ке.
на 7ке никаких исключений все штатно
а про попытку на 8ке печкин в первом посте еще написал.
33 Kassern
 
16.12.21
10:26
(32) Тема в секции "1С 8")
34 Casey1984
 
16.12.21
10:35
(23) В (0) "Как проверить, что строка содержит буквы?" А если там не буква, знак?)
35 Casey1984
 
16.12.21
10:43
(34) Если идти в пятницу и не придираться к формулировке задания то в контексте сервера:

Функция СодержитНеЦифры(Строка)
    
    Если ПустаяСтрока(Строка) Тогда
        Возврат Ложь;
    КонецЕсли;
    
    Данные = Новый ТаблицаЗначений;
    Данные.Колонки.Добавить("Строка", Новый ОписаниеТипов("Строка"));
    Данные.Добавить().Строка = Строка;
    
    Построитель = Новый ПостроительЗапроса;
    Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(Данные);
    СтрокаОтбора = Построитель.Отбор.Добавить("Строка");
    СтрокаОтбора.ВидСравнения = ВидСравнения.Содержит;
    СтрокаОтбора.Значение = "%[^0-9]%";
    СтрокаОтбора.Использование = Истина;
    Построитель.Выполнить();
    
    Возврат Не Построитель.Результат.Пустой();
    
КонецФункции // СодержитНеЦифры()
36 Kassern
 
16.12.21
10:46
(35) строка а123а что вам вернет?)
37 Kassern
 
16.12.21
10:48
(35) а зачем построитель и ТЗ?
38 Casey1984
 
16.12.21
10:48
(36) Вернет: Да
39 Bigbro
 
16.12.21
10:48
ну если на знак возбуждаться не надо а только на буквы надо - то я сдаюсь, телепат отказал, я решал не ту задачу.
тогда диапазонами кодов букв с учетами раскладок и кодировок - короче те еще танцы.
40 Casey1984
 
16.12.21
10:49
(37) Иду в пятницу ...
41 Ryzeman
 
16.12.21
10:50
(40) Тогда лучше микросервис на GO
42 Kassern
 
16.12.21
10:50
(35) можно же проще:
ВЫБРАТЬ
    &Строка КАК Строка
ГДЕ
    &Строка ПОДОБНО "%[^0-9]%"
43 Kassern
 
16.12.21
10:51
(40) тогда ладно
44 Casey1984
 
16.12.21
10:51
(41) Начинайте разрабатывать
45 pechkin
 
16.12.21
11:04
Через регекспы, но без внешних компонент
https://infostart.ru/1c/articles/464971/
46 Kassern
 
16.12.21
11:07
(45) а я все ждал, когда регулярные выражения предложат)
47 pechkin
 
16.12.21
11:08
(46) ну так давно начали, правда в запросах
48 Smallrat
 
16.12.21
11:09
таки да, добавление условия проверять такие строки как "-100.2" или "10.2.2" является ли строка числом или нет делает задачу интереснее
49 Smallrat
 
16.12.21
11:18
хотя это, конечно, всего пару условий добавить перед проверкой, так что наверное не особо интереснее
50 Kassern
 
16.12.21
11:27
(49) интересней понимать, а не число это в 16ричной системе, а не просто строка)
51 Kassern
 
16.12.21
11:27
(50) хотя это тоже пара условий)
52 Ботаник Гарден Меран
 
16.12.21
11:40
(21)
Даже без исключения полно косяков.
Строка(Число("00040")) = "40"
Строка(Число("01040")) = "1 040"
53 timurhv
 
16.12.21
11:42
(52) формат исправит ситуацию
54 Перцовый баллон
 
16.12.21
11:49
ДопустимыеСимволы = "0123456789";
Результат = СтроковыеФункцииКлиентСерверРФ.ТолькоКириллицаВСтроке(СтрокаПроверки, УчитыватьРазделителиСлов, ДопустимыеСимволы)
55 Bigbro
 
16.12.21
11:59
(52) ну так сокрЛП я для чего по твоему повесил?
как раз обрезать пробелы и нули.
56 1Сергей
 
16.12.21
12:00
(0) Найти(Стр, "А")
57 Ryzeman
 
16.12.21
12:01
(56) вроде не пятница ещё)
58 1Сергей
 
16.12.21
12:07
(57) а вот жаль)
59 Ботаник Гарден Меран
 
16.12.21
12:10
(55)
Ага.
СокрЛП("0040") = "0040"
60 Кирпич
 
16.12.21
12:19

Если ВРег(Стр) <> НРег(Стр) Тогда
   Сообщить("В строке есть буквы");
КонецЕсли
61 Kassern
 
16.12.21
12:21
(60) А если Стр="1!"?)
62 Кирпич
 
16.12.21
12:22
(61) А ! не буква
63 Kassern
 
16.12.21
12:22
(61) ну или, что-то типа такого "123诶"))
64 Kassern
 
16.12.21
12:22
тоже не буква?))
65 Кирпич
 
16.12.21
12:23
(64) нет. это иероглиф
66 Kassern
 
16.12.21
12:24
(65) "БУ́КВА — письм. или печ. знак в составе алфавита, служащий для обозначения определенного звукового комплекса" Вполне попадает под определение)
67 Casey1984
 
16.12.21
12:24
(62) Предлагаю выкладывать только отлаженный код
68 Кирпич
 
16.12.21
12:25
(67) от я буду еще вам отлаживать сидеть
69 Kassern
 
16.12.21
12:27
но в целом подход интересный, если у ТС речь только про буквы (без всяких спец символов и иероглифов), то вполне сканает
70 Кирпич
 
16.12.21
12:30
(69)у автора явно какие то коды. скорее всего латинские буквы и цифры
71 Перцовый баллон
 
16.12.21
12:30
>>Как проверить, что строка содержит буквы?

Результат = Не СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке("0123abc"); // Истина
72 Кирпич
 
16.12.21
12:35
(66) Иероглиф -случайный набор прямых и кривых палочек, пляшущих человечков и прочих загогулин, обозначающий что угодно в зависимости от контекста. По легенде, в сказочных странах Китае и Японии с помощью этих палочек аборигены говорят и рисуют аниме, но, так как никто в них никогда не был, проверить это невозможно. (lurkmore)
73 Kassern
 
16.12.21
12:36
(72) не нравятся иероглифы? Тогда возьмем арабский алфавит, он то как раз из букв состоит, только вот они верхнего регистра не имеют)
74 Kassern
 
16.12.21
12:36
75 Кирпич
 
16.12.21
12:39
(73) ну всё. победил.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший