tehextinct Skrevet 13. juni 2007 Rapporter Del Skrevet 13. juni 2007 Jeg vil sjekke om en variabel $_POST['brukernavn'] inneholder æøå. Lenke til kommentar
Crowly Skrevet 13. juni 2007 Rapporter Del Skrevet 13. juni 2007 (endret) Du kan bruke preg_match() Da blir det noe slikt PHP <?phpif (preg_match("[æøå]/i",$_POST['brukernavn'])>0) echo "ÆØÅ funnet i brukernavn"; else echo "Brukernavn uten ÆØÅ"; ?> Nå har jeg ikke brukt denne funksjonen før, så er ikke 100% sikker på at "pattern" er helt riktig. Sikkert noen som kan rette på det hvis jeg har gjordt noe galt Endret 13. juni 2007 av crowly Lenke til kommentar
Ståle Skrevet 13. juni 2007 Rapporter Del Skrevet 13. juni 2007 (endret) Jeg fikk det til med preg_match() men str_pos() raskere. Men jeg vet ikke hvordan jeg bruker den. =/ <?php $var1 = "testnavn"; $var2 = "lolætøasdå"; $var3 = "æå"; $pattern = "^[æøå]^i"; echo '$var1 innholder'; if( !preg_match( $pattern, $var1 ) ) echo ' ikke '; 'æøå'; echo '$var2 innholder'; if( !preg_match( $pattern, $var2 ) ) echo ' ikke '; 'æøå'; echo '$var3 innholder'; if( !preg_match( $pattern, $var3 ) ) echo ' ikke '; 'æøå'; ?> Endret 13. juni 2007 av Ståle Lenke til kommentar
dabear Skrevet 13. juni 2007 Rapporter Del Skrevet 13. juni 2007 Denne sjekker at stringen æøå finnes i $mystring if(strpos($mystring, 'æøå') !== false) Eller skulle du sjekke om kun en av de bokstavene finnes i $mystring? Lenke til kommentar
Crowly Skrevet 13. juni 2007 Rapporter Del Skrevet 13. juni 2007 (endret) Med strpos() kan du gjøre noe slik PHP <?php//strpos() er CASE SENSITIVE, if (strpos($_POST['brukernavn'],'Æ')!==FALSE OR strpos($_POST['brukernavn'],'æ')!==FALSE OR strpos($_POST['brukernavn'],'Ø')!==FALSE OR strpos($_POST['brukernavn'],'ø')!==FALSE OR strpos($_POST['brukernavn'],'Å')!==FALSE OR strpos($_POST['brukernavn'],'å')!==FALSE) echo "Æ, Ø eller Å funnet i brukernavn"; else echo "Ingen æ,ø eller å i brukernavn"; ?> Edit2: Rettet opp flere feil og fjernet kode som ikke fungerte. Endret 14. juni 2007 av crowly Lenke til kommentar
dabear Skrevet 13. juni 2007 Rapporter Del Skrevet 13. juni 2007 crowly; niks, det der vil ikke funke. Du har feil syntaks på IFene dine og du mangler !== false slik som jeg brukte overfor. Det har seg nemlig slik at strpos kan returnere 0 (at 'ø' feks finnes først i stringen), eller false ('ø' finnes ikke i stringen), som begge evalurer til false om du ikke bruker strict comparison (slik som jeg gjorde over, !==) Lenke til kommentar
-morten Skrevet 13. juni 2007 Rapporter Del Skrevet 13. juni 2007 Og 'false' er noe helt annet enn false. Det ene er en tekst-streng, det andre er en boolsk verdi. Men trenger da ikke gjøre det så vanskelig..: if (preg_match('/[æøå]/i', $variabel)) { har æøå; } Lenke til kommentar
Crowly Skrevet 13. juni 2007 Rapporter Del Skrevet 13. juni 2007 Og 'false' er noe helt annet enn false. Det ene er en tekst-streng, det andre er en boolsk verdi. Vet det, men kjørte skriptet mitt på serveren hjemme og !=false resulterte i "else koden" hver gang, mens !='false' så fungerte det som tiltenkt. Da er ikke jeg så nøye på om jeg sjekker mot en streng eller bolsk verdi, enten så fungerer det eller så fungerer det ikke Lenke til kommentar
-morten Skrevet 14. juni 2007 Rapporter Del Skrevet 14. juni 2007 Så når du hadde en feil i scriptet, så løste du det ved å innføre en feil til som tilfeldigvis fikk det til å virke med akkurat de dataene du brukte? Det er jo alltid en god og varig løsning Du hadde vel kanskje en æ, ø eller å først i variabelen, slik at den returnerte 0 (plass nr 0), noe som == false? Som dabear sier skal man bruke === og !== for funksjoner som strpos. 'false' vil aldri være lik hverken et tall eller false. Lenke til kommentar
Crowly Skrevet 14. juni 2007 Rapporter Del Skrevet 14. juni 2007 Ved nærmere ettersyn så fungerte ikke koden, strtoupper ikke konverterer æ,ø,å (og ble lurt da resultatet ble som forventet). Mulig man må endre noe med setlocale() for å få den funksjonaliteten til få fungere, men det har jeg ikke satt meg noe særlig inn i. Koden over er rettet. Lenke til kommentar
itsmebth Skrevet 14. juni 2007 Rapporter Del Skrevet 14. juni 2007 (endret) PHP <?phpif(strspn($name, "ÆØÅæøå")){ // $name inneholder æ, ø eller å. } else { // } ?> strspn() Endret 14. juni 2007 av itsmebth Lenke til kommentar
jorgis Skrevet 14. juni 2007 Rapporter Del Skrevet 14. juni 2007 crowly; niks, det der vil ikke funke. Du har feil syntaks på IFene dine og du mangler !== false slik som jeg brukte overfor. Det har seg nemlig slik at strpos kan returnere 0 (at 'ø' feks finnes først i stringen), eller false ('ø' finnes ikke i stringen), som begge evalurer til false om du ikke bruker strict comparison (slik som jeg gjorde over, !==) 8852776[/snapback] Det skal nevnes at switch() utfører sjekker med ===, så strpos() er trygg å bruke i en switch, selv om strengen du leter etter kan befinne seg i starten; $error = 'Cache: The cache is not writable'; switch ($error) { case strpos($error, 'Cache:'): cache_error(); break; case strpos($error, 'DB:'): database_error(); break; } Dette er ting som ikke er dokumentert godt nok i php-manualen, dette var noe som gjorde at jeg brukte strstr() lenge, fordi jeg visste at strpos() kunne returnere 0 (som == false). Lenke til kommentar
-morten Skrevet 14. juni 2007 Rapporter Del Skrevet 14. juni 2007 Ikke dokumentert godt nok? På php.net/strpos er det en stor rød firkant med overskriften 'Warning', hvor det står at du må bruke ===. Burde da holde det.. Lenke til kommentar
jorgis Skrevet 14. juni 2007 Rapporter Del Skrevet 14. juni 2007 Ikke dokumentert godt nok? På php.net/strpos er det en stor rød firkant med overskriften 'Warning', hvor det står at du må bruke ===. Burde da holde det.. 8864479[/snapback] At switch bruker === er ikke godt nok dokumentert, nei. Lenke til kommentar
Noxe Skrevet 15. juni 2007 Rapporter Del Skrevet 15. juni 2007 (endret) Jeg vil sjekke om en variabel $_POST['brukernavn'] inneholder æøå. 8851661[/snapback] <?php if(strpos(strtolower($_POST['username'], "æ")) === false || strpos(strtolower($_POST['username'], "ø")) === false || strpos(strtolower($_POST['username'], "å")) === false){ echo "inneholder IKKE æ, ø eller å";}else{echo "inneholder enten æ. ø eller å";} ?> || betyr ELLER (kan også bruke OR) strpos søker ser om den finner gjeldende søkeord\bokstav strtolower sørger for alt blir til små bokstaver === false er nødvendig fordi om den finner ø med fks starten så vil det gi feil utslag osv. denne måten er 100% sikker. Hva er grunnen du ikke vil ha ÆØÅ? Endret 15. juni 2007 av Noxe Lenke til kommentar
jorgis Skrevet 15. juni 2007 Rapporter Del Skrevet 15. juni 2007 (endret) Hvorfor tror du at strtolower() støtter æøå? IMO kom itsmebth med den greieste løsningen noen poster over. Ingen vits å komme opp igjen med gamle løsninger som ikke funker engang. EDIT: Løsningen din kan fungere om du bruker mb_strtolower() og kjører unicode på saker og ting. Det er likevel ikke en like elegant løsning som itsmebth sin. Endret 15. juni 2007 av jorgis Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå