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