Автор | Сообщение |
|
| |
Пост N: 105
Зарегистрирован: 15.12.06
|
|
Отправлено: 19.10.10 12:21. Заголовок: Как проверить файл на соответствие маске?
Такой глупый вопрос, но ответа я не могу найти, хотя вещь вроде стандартная. Существует ли стандартная функция, которая определяет, соответствует ли имя файла (скажем, '5544.832') маске (скажем, '*.832')? Просто две строки на входе и логика на выходе. Наверняка не мне одному это понадобится.
|
|
|
Ответов - 10
[только новые]
|
|
|
| постоянный участник
|
Пост N: 977
Зарегистрирован: 09.10.06
|
|
Отправлено: 19.10.10 12:47. Заголовок: Для Harbour смотрите..
Для Harbour смотрите ? hb_wildMatch("*.832","5544.832", .f. ) ? hb_wildMatch("*.832","5544.832", .t. ) ? hb_wildMatch("*.837","5544.832", .f. ) ? hb_wildMatch("*.837","5544.832", .t. ) Есть еще регистронезависимый вариант - функция hb_wildMatchI Для xHb скорее всего эта функция называется WildMatch
|
|
|
|
| |
Пост N: 14
Зарегистрирован: 28.07.10
|
|
Отправлено: 22.10.10 07:10. Заголовок: до кучи - похожий вопрос
как проверить на соответствие формату? например - от 1 до 3 цифр "." от 1 до 3 цифр "." - короче АйПишник или - две больших русских буквы "-" две цифры и т.п.
|
|
|
|
| |
Пост N: 1886
Зарегистрирован: 17.05.05
|
|
Отправлено: 22.10.10 10:16. Заголовок: SADSTAR33 пишет: ка..
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 22.10.10 10:45. Заголовок: 1. Регулярными выраж..
1. Регулярными выражениями 2. не от 1 до 3 цифр, а от 0 до 255. и айпи может записываться различными способами 0300.0xab.1.1 - первый байт в 8ричном виде, второй в 16ричном или одним 4-байтовым целым 3578349857 надо использовать специальную библиотек для работы с айпи)))
|
|
|
|
| |
Пост N: 15
Зарегистрирован: 28.07.10
|
|
Отправлено: 25.10.10 02:47. Заголовок: Вариант
Вариант Проверка на соответствие десятично-точечному формату function IsIP(p) local result:=.t., ar:={}, a, l, i ar:=HB_ATOKENS(p,".") if len(ar)#4; return .f.; endif for i:=1 to 4 a:=ar[ i ] l:=len(a) if l=1 if !HB_RegExMatch("\d",a) result:=.f. endif elseif l=2 if !HB_RegExMatch("[1-9]\d",a) result:=.f. endif elseif l=3 if !HB_RegExMatch("[1-2]\d\d",a) result:=.f. elseif val(a)>255 result:=.f. endif else result:=.f. endif if !result; exit; endif next return result Насколько рационально? Можно все result:=.f. заменить на return .f., убрать прерывание цикла и закончить return .t. т.е. убрать переменную result совсем
|
|
|
|
| |
Пост N: 1887
Зарегистрирован: 17.05.05
|
|
Отправлено: 25.10.10 11:57. Заголовок: Еще вариант (самый п..
Еще вариант (самый простой и при желании его можно навернуть) Func IsIP(p) return HB_RegExMatch("([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})",p)
|
|
|
|
| |
Пост N: 16
Зарегистрирован: 28.07.10
|
|
Отправлено: 26.10.10 00:09. Заголовок: 333.333.333.333 прой..
Этот вариант я первым делом проверил прежде чем наворотами заниматься 333.333.333.333 пройдет? 333.333.333.3334 тоже пройдет. 12345.333.333.12345 тоже пройдет. вот так уже лучше "^([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})$" но все равно на max255 не проверяет
|
|
|
|
| |
Пост N: 1888
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.10.10 07:39. Заголовок: SADSTAR33 пишет: ..
SADSTAR33 пишет: цитата: | "^([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})$" но все равно на max255 не проверяет |
| Точно , не подумал Func IsIP(p) local ret:=.t. local creg:="^([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})$" local j if !HB_RegExMatch(creg,p) return .f. endif for each j in HB_ATOKENS(p,".") if val(j)>255 return .f. endif next return ret
|
|
|
|
| |
Пост N: 18
Зарегистрирован: 28.07.10
|
|
Отправлено: 26.10.10 08:30. Заголовок: Для полного счастья ..
Для полного счастья - удалить local ret:=.t. заменить return ret на return .t.
|
|
|
|
| |
Пост N: 1889
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.10.10 08:35. Заголовок: SADSTAR33 пишет: lo..
SADSTAR33 пишет: это уже привычка ;)
|
|
|
|