"С цел опростяване на задачата, "валиден Х" не винаги ще покрива съотетната дефиниция от реалността."
Четвърта задача
@Атанас Димитров
Да речем че имаме телефона 0037288888888 в интернационален запис, тогава кое е кода на държавата - 3, 37 или 372?
Според мене при такова двусмислие трябва да се вземе максималният възможен код, защото така сме консистентни с "алчноста" на регулярните изрази.
0037288888888
- не е валиден телефонен номер.0037 288888888
е валиден в интернационален формат :)А 00372 88888888 не е ли валиден? Може ли да отговорите на въпроса на @Атанас Димитров?
Защо? Нали разделителите са опционални .Т.е не трябва ли 0037288888888 и 0037 288888888 да връщат един и същ резултат? И ако не е така да приемаме ли, че при всеки телефонен номер в интернационален формат се очаква да има разделител след международния код?
Ако 0037288888888 не е валиден, то тогава този тест
self.assertTrue(solution.Validations.is_phone('+35929555111')) няма ли да бъде грешен?
Мисля, че @Кирил Владимиров има предвид, че не е валиден в локален формат, а не за самата задача.
А какво става ако preserve_email_hostname и partially_preserve_email_username са едновременно True?
@Димитър според мен когато флагът partially_preserve_email_username е вдигнат, това автоматично трябва да значи, че и флагът preserve_email_hostname е вдигнат. Тоест няма как partially_preserve_email_username да е вдигнат, а preserve_email_hostname да не е. А когато 2-та флага са вдинати то се филтрира само част от потребителското име в даден валиден мейл, като първите три символа се запазват, ако дължината на потребителското име в email-а е под 6 символа обаче, то се филтрира цялото потребителско име.
Примерно:
при вдигнат флат partially_preserve_email_username
asdfghjkl@abv.bg -> asd[FILTERED]@abv.bg
asdfg@abv.bg -> [FILTERED]@abv.bg
а когато само флагът preserve_email_hostname е вдигнат
asdfghjkl@abv.bg -> [FILTERED]@abv.bg
asdfg@abv.bg -> [FILTERED]@abv.bg
Ако греша моля някой да ме поправи :)
Какво трябва да се случи, ако в този пример:
filter = PrivacyFilter('someone@examplecom') filter.preserve_email_hostname = True
hostname-а е некоректно подаден?
Филтрирането се извършва само над валидни имейли/телефони, така че,според мен, трябва да се върне същия текст.
@Kирил
0037288888888
- не е валиден телефонен номер.0037 288888888
е валиден в интернационален форматПоне според правилата описани в условието ми изглежда напълно валиден. Какво имаш предвид ?
Имам въпросче:
" 0898342808 " валиден телефонен номер ли е?
" __:: 38383838 ,., " валидно число ли е?
Във Validations за първото не съм сигурен, но би трябвало да не е валиден номер, защото ти започва с интервал, а във второто имаш случайни символи, различни от цифра и точка, което си е невалидно според условието.
Между date и time какви разделители може да очакваме? Това например валидно ли е 2012-10-10-10:15:11?
"... или интервал, или главна латинска буква T."
Дата и час
Под "дата и час" ще разбираме горните два формата, събрани заедно с разделител или интервал, или главна латинска буква T.
Ако 0037288888888 не е валиден, то тогава този тест
self.assertTrue(solution.Validations.is_phone('+35929555111')) няма ли да бъде грешен?
Извинявам се, моя грешка. Възползвайте се от алчността на регулярните изрази. Т.е. в случая взимаш максималните три цифри след плюса.
Добре, а това валиден номер ли е?
+359 1- 243 =>
+3 591243
is_date_time(...) Възможно ли е да има повече от 1 разделител или комбинация от разделителите?
Това валиден date_time ли е? 2012-11-19 T 19:00:00
@Момчил, Под "дата и час" ще разбираме горните два формата(дата/час), събрани заедно с разделител или интервал, или главна латинска буква T. => 2012-11-19 T 19:00:00 не е валиден date_time,защото има 2 интервала и T,щеше да е о.к,ако имаше само веднъж T или само един интервал по средата. :)
@Пламен според мен това е валиден номер с международен код 3 (тъй като международния код може да е от 1 до 3 символа) и цяла част 59 1- 243 ("нищо" , " " и "- " са валидни разделители тъй като имаш опционално до 2 разделителя тоест може да няма нито един, един или два разделителя и имаш общо 6 цифри, така че всичко си е ОК и с цялата част)
Така че мисля че +359 1- 243 и +3 591243 са един и същ номер написан по различен начин.
@Момчил, из първата страница,
В реалните тестове как се очаква да се казва функцията is_date_time или is_datetime?
Прав си. Моя грешка, поправих я. Методът трябва да бъде is_datetime.
т.е. ако не си го копирал просто набързо, а си пишеш функцията с долна черта (is_date_time), няма да ти минат тестовете.
Здравейте, Последно 0037288888888 валиден телефонен номер ли е или не ?
Също така 0000 валидно число ли е ? Както и 00012000 ?
Телефонният номер 0037288888888 е валиден. За числата 0000 трябва да е валидно, а 00012000 - не. (Позовавам се на интерпретатора, според който type(0000) e <class 'int'>, a type(00012000)
File "<stdin>", line 1
type(00012000)
SyntaxError: invalid token
EDIT: според условието:
може да следва или само една 0,
значи 0000 няма да е валидно число
@Драгомир Тунчев Благодаря за напомнянето, но първо преглеждам форума и после пиша :)
@Ралица Цанова Благодаря, и аз така мислех, но все пак реших да попитам :)
Ще се подават ли стрингове като този:
'someone@example.com and Reach me at: 0885123123'
+359 88 121-212-12
това е пример от условието за интернационален телефонен номер. Там е казано, че същинската част може да започва опционално с разделител(и). Това означава, че в примера кода на държавата не е359
, а3
или35
?Добре, сериозно. Този ред от условието отговаря конкретно на този въпрос.
може да следва или само една 0, или пък цифра от 1 до 9, последвана от неограничен брой други цифри от 0 до 9
Ще се подават ли стрингове като този:
'someone@example.com and Reach me at: 0885123123'
Да.
@Владимир, отговорено е на този въпрос.
А сега усещам, че не знам какво искате да кажете в условието
същинската част не може да завършва на разделител, но може да започва с разделител(и)
тези скоби ги имате предвид за разделител в низа с телефонния номер или просто сте искали да напишете "разделител/разделители" по-накратко?
Трябва да сте влезли в системата, за да може да отговаряте на теми.