|
|
|
Как определить что в строке только цифры и латинские буквы? | ☑ | ||
|---|---|---|---|---|
|
0
HelpFinder
06.06.08
✎
16:10
|
Нужно реализовать функцию, которая бы отсеивала определяла есть ли в строчке символы отличные от латинских букв и цифр? Как бы сделать это
|
|||
|
1
Fragster
гуру
06.06.08
✎
16:11
|
ну, например на javascript через регэксп
|
|||
|
2
Terv
06.06.08
✎
16:11
|
а в чем проблема?
|
|||
|
3
ДенисЧ
06.06.08
✎
16:12
|
для каждого символа строки сравнить его на вхождение в интервал от КОдСимв("0") до КодСимв("Z")
Только я не помню с ходу, Сначала цифры, потом буквы или наоборот. А так множество латинских букв в таблице кодировки плотное |
|||
|
4
Terv
06.06.08
✎
16:15
|
ЦифрыИЛатиница = "1234567890qwertyuiopasdfghjklzxcvbnm";
Результат = ""; Для сч = 1 по СтрДлина(ПроизвольнаяСтрока) Цикл Если Найти(Врег(ЦифрыИЛатиница), Врег(Сред(ПроизвольнаяСтрока,Сч,1))) > 0 Тогда Результат = Результат + Сред(ПроизвольнаяСтрока,Сч,1); КонецЕсли; КонецЦикла; |
|||
|
5
Ёпрст
гуру
06.06.08
✎
16:17
|
(0) нет ничего проще :
Если Стр = OemToAnsi(Стр) Тогда Сообщить(" английская строка блин"); Иначе Сообщить(" есть русские буковки в строке .."); КонецЕсли; ЗЫ: Можешь проверять и посимвольно. |
|||
|
6
Fragster
гуру
06.06.08
✎
16:18
|
(5) а непечатные символы в диапазоне до 127 символа не учтены!
|
|||
|
7
HelpFinder
06.06.08
✎
16:20
|
(5)оригинально ))
спасибо всем |
|||
|
8
Ёпрст
гуру
06.06.08
✎
16:22
|
(6) Непечатные символы уже английскими стали?
|
|||
|
9
Ёпрст
гуру
06.06.08
✎
16:22
|
+8 Или, к примеру, © - какой символ?
|
|||
|
10
regniws
06.06.08
✎
16:23
|
сам всегда пользую (5), но как-то пошло это..
не находите!? |
|||
|
11
Fragster
гуру
06.06.08
✎
16:26
|
(8),(9) ну, главное, что ты меня правильно понял. копилевты, евры, фунты, кавычки и прочая шняга - оем2анси нифига не поменяет - ибо кода - <= 127 :)
|
|||
|
12
Господин ПЖ
06.06.08
✎
16:29
|
слабо до 400 дотянуть?
|
|||
|
13
Fragster
гуру
06.06.08
✎
16:31
|
scr = СоздатьОбъект("MSScriptControl.ScriptControl");
scr.language = "javascript"; scr.addcode("a = "+МояСтрока); Латинские = scr.eval(?(a == a.replace(/[a-z,A-Z,0-9]/,""),1,0)) |
|||
|
14
regniws
06.06.08
✎
16:32
|
(13) а смысл остался тот же, тем более еще и медленнее.
а если у нас, допустим, словарь произвольный? |
|||
|
15
Fragster
гуру
06.06.08
✎
16:32
|
(13) ой, кавычки забыл :)
|
|||
|
16
Fragster
гуру
06.06.08
✎
16:33
|
(14) ни фига не медленнее - нету цикла с 26+26+10 итерациями
|
|||
|
17
Fragster
гуру
06.06.08
✎
16:34
|
(14) и что значит - словарь производный? регэксп - очень мощная штука, рекомендую. а вообще там не replace, а match надо использовать, но лень в мануалы лезть...
|
|||
|
18
HelpFinder
06.06.08
✎
16:36
|
Кстати как раз я на самом деле под WEB пишу на АСП и 1С77. поэтому такие вопросы и пошли )
|
|||
|
19
regniws
06.06.08
✎
16:36
|
(16) сложность получается на обычном
О(ДлинаСловаря*ДлинаСтроки) Понятное дело, что реплейс из СкриптКонтроля работает таким же перебором, просто низкоуровневым, но на все эти ком-взаимодействия - время много уходит. На 1с, просто рассмотреть чисто алгоритмческую задачу. |
|||
|
20
regniws
06.06.08
✎
16:37
|
(17) словарь произвольный(!),
например: словарь hex символов "01234567890xabcdefXABCDEF" |
|||
|
21
Fragster
гуру
06.06.08
✎
16:40
|
просто, регэкспом, например, можно проверить валидность формата емэйла или урла намного более читабельно, чем то же самое на 1с делать. Просто я уверен, что задача далеко не целиком состоит в определении наличия/остутствия каких-то букв - а тут уж регэкспы рулят
|
|||
|
22
regniws
06.06.08
✎
16:42
|
(21) я не спорю, проверка валидности строки установленному шаблону - регэксп.
Но это из пушки по воробьям в данном случае :) и все же !? :) Идеи? собственно, сам обдумываю хэширование сейчас. |
|||
|
23
Fragster
гуру
06.06.08
✎
16:43
|
(20) опять же проверять по строке 0[х,Х][0-9,A-F,a-f] (или что-то типа того) легче, чем проверять, является ли первые символы 0x, или 0Х а потом остальную часть...
|
|||
|
24
regniws
06.06.08
✎
16:48
|
хм.. собственно придумал :))))))
не экономный к памяти, но зато мы решаем все за один проход. общая схема, кому знакомы плюсы, поймут: bool Dict[256] ; memset(&Dict[0], sizeof(Dict), 0); //изначально все в массиве фолс; //выставляем дальше в true все коды, которые валидны Dict['0'] = true ; Dict['1'] = true ; Dict['2'] = true ; Dict['3'] = true ; .... Dict['x'] = true ; Dict['z'] = true ; int stLen = strlent(testString); bool valid = true ; for( int i =0; i<stLen ; i++ ) if(!Dict[testString[i]]){valid = false; break;} кому не понятно, дам каменты. задача решена за время o(длинаМассива) |
|||
|
25
Лефмихалыч
06.06.08
✎
16:51
|
(24) ну, да, ни кто ж не сказал ни чо про 1С
|
|||
|
26
Fragster
гуру
06.06.08
✎
16:51
|
(24) на 1се можно то же написать
|
|||
|
27
Лефмихалыч
06.06.08
✎
16:52
|
А вообще, эта тема рискует стать конкурентом v8: Как узнать - Четное число или нет?
|
|||
|
28
Fragster
гуру
06.06.08
✎
16:52
|
правла через список значений :)
|
|||
|
29
Fragster
гуру
06.06.08
✎
16:52
|
(27) ну так пятница-то ненастоящая!
|
|||
|
30
regniws
06.06.08
✎
16:53
|
(25,26) ну да, я просто быстро накидал, на 1с будет почти тоже самое, просто код объемней чутку, а смысл тот же.
:))) теперь со спокойной душой можно утвердить, что тема закрыта!? :) |
|||
|
31
regniws
06.06.08
✎
16:53
|
(28) если 8ка, то там есть объект Массив, так что и без списков обойдемся :)
|
|||
|
32
Ёпрст
гуру
06.06.08
✎
17:03
|
(31) В семёрке, как ни странно тоже есть массив .
|
|||
|
33
regniws
06.06.08
✎
17:07
|
(32) ууууууупц :))))))) "как это было давно.... "
Просто переклино, что в 8ке он отдельным объектом выделен. |
|||
|
34
Fragster
гуру
07.06.08
✎
11:20
|
(28) тут смысл не в том, есть массив, или нет, а в том, что индексами этого массива является наш алфавит - в 1с этого нету, в 8 есть соответствие, а из 7.7 подойдет список значений как раз...
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |