Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]wyciągnięcie tylko liter i cyfr z ciągu
świeżak
post 12.02.2011, 15:02:23
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 12.02.2011

Ostrzeżenie: (0%)
-----


Cześć,

Próbuję wyciągnąć tylko litery, cyfry i -_ z loginu, niestety mi to nie wychodzi.

Przy rejestracji chciałbym, aby użytkownicy podając login !@$^.<>"{Swieza+}k_13<<?
otrzymali tylko Swiezak_13.

próbuję w taki sposób :

Kod
$login=htmlspecialchars($_POST['login']);
        $login=ereg('[a-zA-Z0-9._-]', $login);


Niestety nie działa, próbowałem preg_match, preg_match_all, preg_replace niestety patrzę na manual i nie widzę czegoś takiego co usunie mi niepotrzebne znaki.

Mógłbym napisać wszystkie znaki których nie zezwalam, ale wolałbym wyrażeniem regularnym takim jakie mam podać znaki jakie są zgodne, a resztę usunąć.

Pomożecie?
Go to the top of the page
+Quote Post
Ulysess
post 12.02.2011, 15:13:20
Post #2





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

Ostrzeżenie: (0%)
-----


  1. if(preg_match('/^([a-z0-9_]+)$/i', $_POST['login']))
  2. {
  3. // tralala
  4. }


Ten post edytował Ulysess 12.02.2011, 15:14:15
Go to the top of the page
+Quote Post
sada
post 12.02.2011, 15:14:26
Post #3





Grupa: Zarejestrowani
Postów: 302
Pomógł: 24
Dołączył: 6.12.2008

Ostrzeżenie: (0%)
-----


  1. $login=htmlspecialchars($_POST['login']);
  2. //$login='!@$^.<>"{Swieza+}k_13<<?';
  3. $login_test='';
  4.  
  5. for ($i = 0; $i < strlen($login); $i++) {
  6. if(ereg('[a-zA-Z0-9_-]', $login[$i])){
  7. $login_test.=$login[$i];
  8. }
  9. }
  10.  
  11. echo $login_test;


Ten post edytował sada 12.02.2011, 15:28:49
Go to the top of the page
+Quote Post
erix
post 12.02.2011, 15:20:05
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Za ereg powinieneś warna dostać. tongue.gif


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
świeżak
post 12.02.2011, 15:21:27
Post #5





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 12.02.2011

Ostrzeżenie: (0%)
-----


Hmm chyba źle wytłumaczyłem.

nie chcę sprawdzać czy takie znaki istnieją w ciągu lub czy się znajdują.

Chciałbym, aby dane jakie przesłał użytkownik !@$^.<>"{Swieza+}k_13<<?
Zostały zamienione w taki sposób aby wyświetlały się tylko litery, cyfry oraz znaki - i _

Czyli w tym wypadku Swiezak_13


Próbuję teraz tak:
Kod
$login=preg_match('/[0-9A-Za-z-zążśźćęńół]/', $_POST['login']);

Jednak wyświetla mi to 1, więc nie o to mi chodzi.

Może jakieś naprowadzenie do manuala z jakiej funkcji skorzystać?
Go to the top of the page
+Quote Post
sada
post 12.02.2011, 15:24:57
Post #6





Grupa: Zarejestrowani
Postów: 302
Pomógł: 24
Dołączył: 6.12.2008

Ostrzeżenie: (0%)
-----


Sprawdzałeś moje?

Nie muszę dodawać , że trzeba drugą linię odkomentować by testować twój login

Acha i trzeba kropkę dać z ucieczką \.

Ten post edytował sada 12.02.2011, 15:27:49
Go to the top of the page
+Quote Post
świeżak
post 12.02.2011, 15:28:33
Post #7





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 12.02.2011

Ostrzeżenie: (0%)
-----


Cytat(sada @ 12.02.2011, 15:24:57 ) *
Sprawdzałeś moje?


Szukam prostszego rozwiązania i wiem że takie jest, wystarczy skorzystać z normalnej funkcji, ale nie potrafię takiej znaleźć.
Więc niestety nie chcę kombinować z Twoim rozwiązaniem.


Jeżeli nie znajdę żadnego rozwiązania, to skorzystam z podmiany wybranych znaków na '', na pewno będzie to lepsze rozwiązanie.


Skoro jest możliwość usunięcia podanych znaków. To na pewno jest też możliwość usunięcia wszystkich znaków nie pasujących do ciągu. Czy się mylę?

Ten post edytował świeżak 12.02.2011, 15:32:13
Go to the top of the page
+Quote Post
MariuszT
post 12.02.2011, 15:48:24
Post #8





Grupa: Zarejestrowani
Postów: 26
Pomógł: 1
Dołączył: 9.06.2003
Skąd: Tomaszów Mazowiecki

Ostrzeżenie: (0%)
-----


  1. $login = ' - @Mar^( )iuszęź!`;-T_5-';
  2.  
  3. echo preg_replace('/[^a-zA-Z0-9-_]/si', '', $login);


@sada, Twoje rozwiązanie jest mega nieoptymalne. Nie używaj strlen w pętli, nie ma powodu żeby używać ereg w pętli. W ogóle nie wolno Ci używać ereg, zapomnij o wszystkich eregach, są wycofywane.

@świeżak, poczytaj o preg_replace. Zakres znaków, które mają zostać podajesz między [ i ]. Wszystkie inne będą usuwane. Pierwszy znak w nawiasach czyli ^ oznacza negację. Gdyby go usunąć to wyrażenie usunęłoby wszystkie znaki wymienione w nawiasach zostawiając wszystkie te, które chcesz usunąć. Czyli tłumacząc prościej, zadziałałoby odwrotnie.

Ten post edytował MariuszT 12.02.2011, 15:52:57
Go to the top of the page
+Quote Post
sada
post 12.02.2011, 15:51:35
Post #9





Grupa: Zarejestrowani
Postów: 302
Pomógł: 24
Dołączył: 6.12.2008

Ostrzeżenie: (0%)
-----


  1. $login='!@$^.<>"{Swieza+}k_13<<?';
  2. $login= preg_replace('/[^a-zA-Z0-9._-]/','', $login);
  3. echo $login
Go to the top of the page
+Quote Post
świeżak
post 12.02.2011, 15:51:57
Post #10





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 12.02.2011

Ostrzeżenie: (0%)
-----


Cytat(MariuszT @ 12.02.2011, 15:48:24 ) *
  1. $login = ' - @Mar^( )iuszęź!`;-T_5-';
  2.  
  3. echo preg_replace('/[^a-zA-Z0-9-_]/si', '', $login);


Sada, Twoje rozwiązanie jest mega nieoptymalne. Nie używaj strlen w pętli, nie ma powodu żeby używać ereg w pętli. W ogóle nie wolno Ci używać ereg, zapomnij o wszystkich eregach, są wycofywane.



Dzięki za odpowiedź, właśnie też doszedłem do tego rozwiązania. Ale mimo wszystko dziękuje za pomoc smile.gif

Umnie wygląda to
Kod
$login=preg_replace('/[^A-Za-z0-9-zążśźćęńół_]/', '', $login);
Go to the top of the page
+Quote Post
sada
post 12.02.2011, 15:56:39
Post #11





Grupa: Zarejestrowani
Postów: 302
Pomógł: 24
Dołączył: 6.12.2008

Ostrzeżenie: (0%)
-----


Chciał z eregiem to zrobiłem eregiem
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 6.06.2024 - 11:43