EregI_Replace – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

EregI_Replace – PHP – Fórum – Programujte.comEregI_Replace – PHP – Fórum – Programujte.com

 

Marek Štafl0
Stálý člen
28. 1. 2007   #1
-
0
-

Omlouvám se za ten nadpis, ale nevěděl jsem, jak to napsat.
Potřebuju v uživatelem zadaném textu jakýkoliv znak mimo písmen anglické abecedy, čísel a pomlčky nahradit podtržítkem.
Takže když uživatel zadá např. "25-cokoliv#" aby se z toho stalo "25-cokoliv_".
Zkoušel jsem tohle:

$nnazev = EregI_Replace("[.[^[[:alnum:]]-]]{1}", "_", $nnazev);

Ale to nefunguje. Regulárním výrazům moc nehovím, takže nevím, jak to udělat.
Díky za jakoukoliv radu!

Nahlásit jako SPAM
IP: ...–
Radoslav Pala0
Super člen
28. 1. 2007   #2
-
0
-

nebolo by pre tento pripad jednoduchsie pouzit str_replace?:



$nnazev = str_replace( "#", "_" $nnazev);

Nahlásit jako SPAM
IP: ...–
Marek Štafl0
Stálý člen
28. 1. 2007   #3
-
0
-

To radypala: Nebylo, já nechci nahrazovat jen mřížku, ale jakýkoliv znak mimo a-z, 0-9 a -. Víš, kolikrát bych to str_replace musel použít?

Nahlásit jako SPAM
IP: ...–
Ondrej Juríček
~ Moderátor
0
Stálý člen
28. 1. 2007   #4
-
0
-

Skús toto:

$str = preg_replace("/[^\w\-]/", "_", $str);

Nahlásit jako SPAM
IP: ...–
Marek Štafl0
Stálý člen
29. 1. 2007   #5
-
0
-

To OndreJ:
Jojo, funguje to, díky moc!

Nahlásit jako SPAM
IP: ...–
Marek Štafl0
Stálý člen
29. 1. 2007   #6
-
0
-

Ještě bych potřeboval, aby to nenahrazovalo ani tečku.
Je to takhle správně:

$str = preg_replace("/[^\w\-\.]/", "_", $str);

Nahlásit jako SPAM
IP: ...–
Jakub0
Super člen
29. 1. 2007   #7
-
0
-

MareX píše:#
# Je to takhle správně:


Jo je. ;) Před pomlčkou a tečkou nemusí být backslash, ale i takhle to fachá.

Nahlásit jako SPAM
IP: ...–
Věřím, že můžete v životě získat všechno, co budete chtít, když budete pomáhat druhým lidem, aby dostali to, co si přejí oni. - Zig Ziglar TOPlist
Marek Štafl0
Stálý člen
30. 1. 2007   #8
-
0
-

Jak to, vždyť tečka nahrazuje libovolný znak mimo nového řádku, takže bez zpětného lomítka by mi to přece nenahradilo nic?!
A pomlčka (teda nevím jak u preg_replace, ale u Ereg_Replace) se používá, pokud chci vymezit nějaké znaky OD DO (např. a-z nebo 0-9), takže pokud není oescapovaná, tak musí být na konci regulárního výrazu.
Třeba:

[a-z0-9#-_]    //nefunguje

[a-z0-9#_-] //funguje

To jsem zkoušel.

Nahlásit jako SPAM
IP: ...–
Jakub0
Super člen
30. 1. 2007   #9
-
0
-

To MareX: Ad pomlčka, záleží kam ji umístíš k tomu si došel sám. Tečka patří ve výčtu mezi obyčejné znaky viz. manuál.(Jsem PCRE Compatible, jak je to u POSIX nevím ;) )

Nahlásit jako SPAM
IP: ...–
Věřím, že můžete v životě získat všechno, co budete chtít, když budete pomáhat druhým lidem, aby dostali to, co si přejí oni. - Zig Ziglar TOPlist
Marek Štafl0
Stálý člen
30. 1. 2007   #10
-
0
-

D1ce píše:#
# To MareX: Ad pomlčka, záleží kam ji umístíš k tomu si došel sám. Tečka patří ve výčtu mezi obyčejné znaky viz. manuál.(Jsem PCRE Compatible, jak je to u POSIX nevím ;) )


Citace z PHP manuálu (PCRE Compatible):

. match any character except newline (by default)


Stejně jako POSIX.

Nahlásit jako SPAM
IP: ...–
Jakub0
Super člen
30. 1. 2007   #11
-
0
-

To MareX: Achjo:


Part of a pattern that is in square brackets is called a "character class". In a character class the [podtrzene]only meta-characters are[/podtrzene]:

\

general escape character
^

negate the class, but only if the first character
-

indicates character range
]

terminates the character class

Backslash

The backslash character has several uses. Firstly, if it is followed by a non-alphanumeric character, it takes away any special meaning that character may have. This use of backslash as an escape character applies both inside and outside character classes.


Tak a tečka je metacharakter a nepatří tam, tak co asi je chlape([podtrzene]ve výčtu[/podtrzene])? Bacha a \(znak/y) nejsou meta znaky, proto ti funguje to \w, rozumíme si?

Nahlásit jako SPAM
IP: ...–
Věřím, že můžete v životě získat všechno, co budete chtít, když budete pomáhat druhým lidem, aby dostali to, co si přejí oni. - Zig Ziglar TOPlist
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 11 hostů

Podobná vlákna

EregI_Replace — založil c7ronaldo

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý