Autor | Zpráva | ||
---|---|---|---|
hugo123 Profil * |
#1 · Zasláno: 30. 12. 2012, 16:30:29
Ahojte,
potrebujem zistit, ci dany string obsahuje vsetky znaky s urciteho pola znakov. Mame napriklad: $cisla = array("1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "A"); A chcem vediet ci $slovo obsahuje VSETKY znaky z tohto pola. Existuje prosim na to nieco v PHP? Vopred dakujem velmi pekne. |
||
midlan Profil |
#2 · Zasláno: 30. 12. 2012, 17:16:49
Tady jsem ti na to udělal funkci:
function obsahuje_slovo_znaky($slovo, array $znaky) { $slovo = str_split($slovo); foreach($znaky as $poradi => $hledany_znak) { foreach($slovo as $znak_slova) { if($hledany_znak === $znak_slova) { unset($znaky[$poradi]); break; } } } return empty($znaky); } |
||
DarkMeni Profil |
#3 · Zasláno: 30. 12. 2012, 17:18:20
Pokud může obsahovat všechny znaky z pole a k tomu i další které v tam nejsou, tak třeba takto
<?php function check($string){ foreach( array( '0', '1', 'a', 'b', 'c' ) as $character ){ if(strpos($string, $character) === false){ return false; } } return true; } var_dump(check('01abc'), check('abcd'), check('01abcd')); ?> |
||
hugo123 Profil * |
#4 · Zasláno: 30. 12. 2012, 18:10:26
Dakujem velmi pekne!!!!, ja potrebujem take, ze zadany string bude obsahovat LEN zadane znaky, ak tam je akykolvek iny znak, tak je to FALSE.
|
||
Michal Maršálek Profil |
Dobrý den,
této funkci předáš text na kterém to chceš testovat, znaky které to má obsahovat a zda to má obsahovat jen dané znaky. function textObsahujeZnaky($text, $znaky, $jenDaneZnaky){ if($jenDaneZnaky){//pokud chceš, aby tam nebyl žádný jiný znak, ale nemusí tam být všechny $text=str_split($text); foreach($text as $znakTextu){ $znakJeOK=false; foreach($znaky as $znak){ if($znakTextu==$znak){ $znakjeOK=true; break; } } if(!$znakJeOK)return false; } return true; } else{//pokud chceš, aby tam byl každý ze znaků, ale můžou tam být jiné znaky foreach($znaky as $znak){ if(strpos($text, $znak) === false){ return false; } } return true; } } |
||
juriad Profil |
pokud má text obsahovat pouze znaky a,b,c,d , lze použít následující regulární výraz:
^(?=[^a]*a)(?=[^b]*b)(?=[^c]*c)(?=[^d]*d)[abcd]*$ a na závěr [abcd]* je otestuje, zda text obsahuje jen povolené znaky nebude to nejspíš příliš efektivní, zvlášť pokud budeš pořád používat jiný regulární výraz, ale na druhou stranu to poskytuje jednoduchý zápis výraz jsem trochu zjednodušil |
||
midlan Profil |
#7 · Zasláno: 31. 12. 2012, 15:35:37
řešení regulárním výrazem jen pro dané znaky od juriad moc nechápu, navrhuji řešení regulárním výrazem tímto způsobem (řešení pro autora threadu pro znaky 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, A i s použitím preg_match):
preg_match('~^[\\dA]+$~s', $string); |
||
juriad Profil |
#8 · Zasláno: 31. 12. 2012, 16:19:32
midlan:
tvůj regexp bohužel nevynutí, aby text obsahoval všechny číslice 0-9, projde třeba "01". Víceméně tvůj regexp dělá přesně to samé jako poslední člen mého: ^[abcd]*$
Já navíc napřed zkontroluji, jestli text obsahuje každý z požadovaných znaků: (?=xxx) testuje, jestli bezprostředně následuje xxx, tedy (?=[^x]*x) testuje, jestli někde dále následuje x
|
||
Tori Profil |
hugo123:
„dany string obsahuje vsetky znaky s urciteho pola znakov.“ „chcem vediet ci $slovo obsahuje VSETKY znaky z tohto pola.“ „zadany string bude obsahovat LEN zadane znaky, ak tam je akykolvek iny znak, tak je to FALSE.“ Dá se to udělat i takhle (ale na rozdíl od regulárů to asi nebude fungovat pro texty s diakritikou v UTF-8, tj. vícebajtové znaky): $cisla = array("1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "A"); $x = 'testovany retezec'; $povolene = (str_replace($cisla, '', $x) === ''); // true, ak obsahuje jen povolene znaky $vsechny = (str_replace(str_split($x), '', implode($cisla)) === ''); // true, ak obsahuje vsechny povolene znaky (muzou se opakovat) |
||
Časová prodleva: 11 let
|
0