• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wyrażenie regularne - dot. spamu i końcówki domen

0 głosów
228 wizyt
pytanie zadane 8 listopada 2016 w Inne języki przez itcloud Gaduła (3,380 p.)
edycja 8 listopada 2016 przez itcloud

Pytanie dot. wyrażenia regularnego. Chciałbym nim objąć wszystkie emaile oprócz tych, które kończą się słowami: ".pl" , ".gmail.com", ".eu", ".info"    - i na razie tyle.

Mam coś takiego, ale nie działa dla samego "pokaże te, które nie kończą się słowem com":

^.{5,}([^(com)])$

bo oczywiście bierze pod uwagę wszystko co nie kończy się znakami 'c' 'o' 'm' a nie o to mi chodziło.

Próbowałem też tego dla samego com:

^.*([^c]{1}[^o]{1}[^m]{1})$

 

komentarz 9 listopada 2016 przez itcloud Gaduła (3,380 p.)
Chyba wyrażenia regularne tutaj nie zdają egzaminu :/

1 odpowiedź

0 głosów
odpowiedź 12 listopada 2016 przez greg703 Obywatel (1,400 p.)
Witam,
bez sprawdzania bazowej części maila czyli czy zawiera @ itp. można to zrobić tak

.*((?<!\.pl)(?<!\.gmail\.com)(?<!\.eu))(?<!\.info)$

to odrzuci każdego rodzaju tekst kończący się na podane przez ciebie końcówki.

Pozdrawiam

 

komentarz 13 listopada 2016 przez itcloud Gaduła (3,380 p.)
Hmmm pierwszy raz widzę konstrukcję "<!", jeszcze rozumiem !?   albo   !=  ale to nie dotyczy "ciągów znaków" tylko pojedynczego.

Zresztą zobacz sam tutaj:

http://regexr.com/ wpisujac to co zacytowałeś. Niemniej dzięki za poswięcony czas.
1
komentarz 13 listopada 2016 przez greg703 Obywatel (1,400 p.)

Oczywiście może się to nieco różnić od języka możesz sprawdzić tutaj:

https://regex101.com/

Zresztą tutaj też to testowałem z opcją dla php. Dla js będzie wyglądać nieco inaczej

komentarz 13 listopada 2016 przez itcloud Gaduła (3,380 p.)
ok, miałem na myśli podstawowe regex bez jakichś dodatkowych udziwnień a tak to wygląda najwyraźniej w przypadku php. Sprawdzam na javascript i nie działa. Ale dzięki mimo wszystko.
komentarz 13 listopada 2016 przez itcloud Gaduła (3,380 p.)

Ja mam coś takiego, ale chciałbym "odwrotność tego", bo obecnie zaznacza mi to wyrażenie te adresy, które posiadają te końcówki (.pl, .gmail.com, .eu.  .info) a chciałbym aby zaznaczało te wszystkie, które takich końcówek nie posiadają.

^(?:.+\.pl$)|(?:.+\.info$)|(?:.+\.eu$)|(?:.+gmail\.com$)

 

komentarz 13 listopada 2016 przez greg703 Obywatel (1,400 p.)

Heh trochę się z tym pomęczyłem bo to zachłanne działanie operatora "*" dawało w kość ale wyszło mi ostatecznie coś takiego i po kilku testach stwierdziłem że powinno działać:

^(?!.*pl)(?!.*gmail\.com)(?!.*eu)(?!.*info)

Daj znać jakbyś znalazł jakieś przypadki co nie przechodzą.

komentarz 13 listopada 2016 przez itcloud Gaduła (3,380 p.)
Niestety nie działa, zastanawiam się jak miałoby to zadziałać, jak pomiędzy grupowaniami nie ma nawet znaku '|'

https://s21.postimg.org/70z3v9unr/image.jpg

a tu przykład że ogólnie edytor z którego korzystam działa:

https://postimg.org/image/ne5g7z0fb/
komentarz 13 listopada 2016 przez greg703 Obywatel (1,400 p.)
edycja 13 listopada 2016 przez greg703

Ok czyli używasz tego regexpa w jakimś programie typu Notepad++?.

Może powinienem to napisać na początku bo jest pewna ważna sprawa związana z wyrażeniami regularnymi mianowicie gdy zaczynamy wchodzić w takie nazwijmy to trudniejsze regexpy jak ten który podałem należy już dobrze wiedzieć z jakiego silnika wyrażeń regularnych korzystamy istnieje ich kilka i nazywane są smakami np. SRE (Simple Regular Expressions), BRE (Basic Regular Expressions), ERE (Extended Regular Expressions). Ja najcześciej sprawdzam swoje regexpy na tej stronie, żeby upewnić się że będzie on działał dla języka w jakim go wykorzystuje. Jako że nie podałeś na początku gdzie chcesz użyć tego wyrażenia, a później napisałeś że sprawdzałeś dla javascripta i to nie działa to myślałem, że właśnie javascripta chcesz użyć do tego wyrażenia regularnego. Na dowód że ten regexp działa zamieszczam screena z kilkoma testami:

https://i.imgsafe.org/8e90c1389d.jpg

W testach jest zapisane, który ma pasować, a który ma nie pasować także nie zwracaj uwagi na kolory bo wszystko jest zielone co oznacza że poprostu przeszły testy. Możesz przeglądnąć chociaż prawdopodobnie w tym programie zadziałają tylko jakieś najbardziej podstawowe wyrażenia. Niestety w takim przypadku niestety nie mogę Ci pomóc. Jeżeli jest to konieczne polecam zmiane narzędzia do edycji.

Pozdrawiam

komentarz 14 listopada 2016 przez itcloud Gaduła (3,380 p.)

Hmm nie wiem sam, używam EditPad Pro od dawien dawna. To co w nim działało, działało zarówno w php (preg_match_all,eregi itd.) jak i w programie apce PROFI MAIL (to jedyny klient pocztowy, który posiada świetne filtry, w tym korzystające z regexów).

Jak już pisałem zaznaczało mi na żółto adresy, które akurat nie chcę zaznaczać - bo więcej jest rzeczy do zaznaczenia (domeny nie spełniające moich kryteriów, czyli WSZYSTKIE [będzie tego trochę] oprócz .pl, .eu, .info., gmail.com  - tak dla przykładu).

Ja online uzywam tego: http://regexr.com/

Tam po lewej stronie masz dokumentację, jakie symbole kiedy i w jaki sposób używać, co oznaczają (Cheatsheet).

A więc tak, staram się to przeanalizować:

^(?!.*pl)(?!.*gmail\.com)(?!.*eu)(?!.*info)

(?!abc)negative lookahead - czyli grupujesz to co nie ma zostać dopasowane, czyli ciągi bez .pl, bez .gmail.com itd? Tylko czemu pomiędzy tymi grupowaniami nie ma znaku | ('or' / 'lub') ? Poza tym dziwne, że nie działa to ani online, ani w tym moim editpad pro.

Ale ok - sprawdzam w Twoim.

#1

fragment 'siu' ładnie podświetla. Zarówno jako regex php i js.
https://postimg.org/image/5ecbx91sx/

#2

twój kod w ogóle nie działa - nic nie podświetla. Więc ??
https://postimg.org/image/v9w4amuxp/

 

1
komentarz 14 listopada 2016 przez greg703 Obywatel (1,400 p.)
edycja 14 listopada 2016 przez greg703

Hm... rzeczywiście mój błąd. Wyrażenie matchuje podany tekst, ale go nie zaznacza :/ Dlatego moje testy przeszły. Gdybyś podał jeden adres to osądziłby czy ten jeden adres zgadza się czy nie i tylko tyle nawet nic by nie zaznaczył...

Jeżeli chodzi o tego rodzaju grupy to nie musisz ich łączyć operatorem lub wystarczy podawać jedno po drugim i będzie sprawdzał czy nie kończy się na "pl" i nie kończy się na "gmail.com". Możesz sprawdzić tutaj:

https://i.imgsafe.org/a2d537ebfc.jpg

niestety nie poradziłem sobie z tym żeby zamiast "staszek" w przykładzie na screenie podać ".*" albo jakiś inny niezachłanny operator bo zabierał wszystko. Sorka za kłopot w takim razie, rozłożyłeś mnie tym regexpem. Poddaje się ;)

komentarz 15 listopada 2016 przez itcloud Gaduła (3,380 p.)
Nie ma problemu - to ja dziękuje za poświęcony czas. Widocznie nie wszystko da się załatwić wyrażeniami regularnymi.

Podobne pytania

0 głosów
2 odpowiedzi 148 wizyt
pytanie zadane 7 stycznia 2021 w Inne języki przez Gucci Gaduła (4,580 p.)
0 głosów
0 odpowiedzi 70 wizyt
pytanie zadane 16 grudnia 2019 w PHP przez mi-20 Stary wyjadacz (13,040 p.)
0 głosów
2 odpowiedzi 136 wizyt
pytanie zadane 11 października 2019 w PHP przez kingkushlee Gaduła (3,860 p.)

89,689 zapytań

138,291 odpowiedzi

309,236 komentarzy

59,620 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...