Gå til innhold

Sjekk om en $var inneholder æøå osv.


Anbefalte innlegg

Videoannonse
Annonse

Du kan bruke preg_match()

Da blir det noe slikt

PHP
<?php

if (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 av crowly
Lenke til kommentar

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 av Ståle
Lenke til kommentar

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 av crowly
Lenke til kommentar

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
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

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

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
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
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 av Noxe
Lenke til kommentar

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 av jorgis
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...