|   |   | 
| 
 | Как проверить, есть ли в строке кроме цифр буквы | ☑ | ||
|---|---|---|---|---|
| 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) ну всё. победил.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |