Loading...
sis44o avatar sis44o 5 Точки

Въпрос свързан с любимите ни RegEx-си - задача от Лаб на Programming Fundamentals - Extended

Здравейте,

Имам нужда от помощ за 2 задача – match phone number от Regex – Lab. Моето решение обхваща само 50% от тестовете.

Условието на задачата може да видите от тук –  https://softuni.bg/trainings/resources/officedocument/13927/lab-problem-descriptions-programming-fundamentals-exended-january-2017


Ето го кода:

https://pastebin.com/MiribRz9

 

Тук може да видите и как съм си играла с Regex израза, който да обхване всички валидни решения:

https://regex101.com/r/gFCHi1/1

Въпроса ми е – как да НЕ хващам третия  и четвъртия match-нат телефонен номер (в горния линк)?

Как да кажа – пич, ако номера започва с нещо разлчно от +359 ти си невалиден?

Благодаря за отделеното време и за всяко предложение!!!
:) :) :)

 

Тагове:
0
Programming Fundamentals
boyan_georgiev avatar boyan_georgiev 62 Точки
Best Answer

Трябва ти positive lookbehind - мачва група преди израза, но не я включва в резултата, конкретно в случая започни регекс-а с това: (?<=^| ) - т.е. казваш на израза, че трябва да започне или с начало на стринг или със спейс, но да не го включва в крайния резултат. Освен това по условие след 359 трябва да мачнеш 2, а не каквото и да е число - всъщност заради тази грешка ти гърмяха половината тестове smiley. Аз лично ползвам https://regexr.com/, защото има супер удобен cheatsheet, където можеш да видиш всички групи и lookaround.

0
sis44o avatar sis44o 5 Точки

Много ти благодаря за изчерпателния отговор!
И аз ползвам regexr.com, но не зная как да запиша и да покажа моя regex израз и примера, който мачва. :)

Всъщност много неща не зная от regex-а... но като го заобичам ще го науча :P.

0
boyan_georgiev avatar boyan_georgiev 62 Точки

Горе вдясно са бутоните save и share, после можеш да си намериш регекса в comunity или favourites, зависи къде го запаметиш :)

0
Samuil_Dechev avatar Samuil_Dechev 35 Точки

Най-лесно според мен ще е да използваш опцията в реджекс за предхождащ търсения стринг символ. Синтаксиса е следния: (?<={symbol}). В случая следва да се прехожда или от \s или от нищо(ако е в началото на инпута).Ето реджекс, който няма да ти мачва посочените от теб стрингове:

(?<=\s|)\+359([ -])2\1\d{3}\1\d{4}\b

В случай на допълнителни затруднения ти прилагам код, който дава 100/100. Успех!

 

https://github.com/samuilll/BeginnerExams/blob/master/ProgrammingFundamentalsExtended/RegulaExpressions/RegExLab/_2_MatchPhoneNumber/_2_MatchPhoneNumber.cs

0
sis44o avatar sis44o 5 Точки

Много ти благодаря!
Да само като сложих първата единична цифра да е 2 и ми даде 100%.
Но много ми беше полезна и информацията за (?<=...) - искрено ти благодаря за помоща!!!

0
AtanasovAtanas avatar AtanasovAtanas 414 Точки

Друг вариант - "\+[359]{3}(\s|\-)2\1[0-9]{3}\1[0-9]{4}\b"

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.