När användarna i den där dejtingsajten jag postat om förut ska lägga in användarnamn så funkar det inte med svenska tecken.
Just nu är koden:
/^\w+$/
Hur ska den se ut för att acceptera svenska tecken, bindestreck och kanske t.o.m. mellanslag?
12 svar · 1 504 visningar · startad av Danne V
När användarna i den där dejtingsajten jag postat om förut ska lägga in användarnamn så funkar det inte med svenska tecken.
Just nu är koden:
/^\w+$/
Hur ska den se ut för att acceptera svenska tecken, bindestreck och kanske t.o.m. mellanslag?
/^[\wåäö\- ]+$/
eller
/^[\wåäö\-\s]+$/
bör räcka, eller så tror jag php att du kan ställa in att \w tillåter svenska tecken.
/^[\wåäö\- ]+$/eller
/^[\wåäö\-\s]+$/bör räcka, eller så tror jag php att du kan ställa in att \w tillåter svenska tecken.
Arghh... alla dessa VAL!!!! ;)
Ska testa med den senare.
Återkommer.
Tack! (y)
kan det vara
setlocale(LC_ALL,'swedish');
som räcker för att få ditt befintliga regex(om du nu inte vill ha mellanslag och andra "whitespace" tecken)?
annars bör du antingen köra ignore case eller så få du lägga in ÅÄÖ också inne i []
/^[\wåäö\-\s]+$/
verkar funka alldeles utmärkt. :)
Om jag nu ska be om en sak till, så kanske man ska kunna använda svenska tecken i lösenorden också. Just nu är koden:
/^(.){4,30}$/i
vilket jag gissar betyder "engelska tecken, minst 4 max 30".
Kan an få in svenska tecken där åxå?
det är ett konstigt uttryck du kör där....men () är att du få en referns på vad som finns inne i den och . är "Match any single character that is not a line break character"
du kan nog skrota ( och ) (för jag gissar att du bara använder det för validering), och å ä ö borde redan vara med i det uttrycket.
. är samma sak som: [^\n].
kan det vara
setlocale(LC_ALL,'swedish');som räcker för att få ditt befintliga regex(om du nu inte vill ha mellanslag och andra "whitespace" tecken)?
annars bör du antingen köra ignore case eller så få du lägga in ÅÄÖ också inne i []
La till ÅÄÖ.
det är ett konstigt uttryck du kör där....men () är att du få en referns på vad som finns inne i den och . är "Match any single character that is not a line break character"
du kan nog skrota ( och ) (för jag gissar att du bara använder det för validering), och å ä ö borde redan vara med i det uttrycket.
. är samma sak som: [^\n].
Heh... du kunde lika gärna prata kinesiska med mig. :)
Men även lösenordet funkar med å ä ö.
Allt verkar OK, alltså!
Tusen takk!
Min åsikt: Tillåt vilka tecken som helst, utom möjligen allmänt dåliga tecken som <, >, och ". Sedan ser du till escapea datat rätt vid utskrift, t ex med htmlspecialchars. Och om du inte använder någon form av prepared statements (men det gör du väl?) självklart mysql_real_escape_string.
Ett annat alternativ är att låta folk välja ett inloggningsnamn som bara kan innehålla a-z och sedan låta ens riktiga namn vara ett separat fält som kan innehålla vilka tecken som helst. Eller, låta folk logga in med e-postadressen, och låta ens riktiga namn vara ett separat fält.
Att bara tillåta a-z + åäö kan vara lite väl begränsande. Du kanske får besök av norrmän eller danskar som bor i Sverige. Eller folk vars namn slutar med é.
Redan nu har du ett problem. Jag tror att åäö bara matchar små bokstäver, eftersom PHP inte vet något om stora och små svenska bokstäver. Så du lär behöva skriva [\wåäöÅÄÖ\-\s]. Om du inte vill göra Örjan Ärla Ågren sur vill säga.
[] = Teckengrupp
[^(något här)] = Matcha allt som inte finns i listan
\n = radbrytning
Så när viugtann1 säger att . = [^\n] menar han att . matchar ett valfritt tecken som inte är en radbrytning.
Min åsikt: Tillåt vilka tecken som helst, utom möjligen allmänt dåliga tecken som <, >, och ". Sedan ser du till escapea datat rätt vid utskrift, t ex med htmlspecialchars. Och om du inte använder någon form av prepared statements (men det gör du väl?) självklart mysql_real_escape_string.
Ett annat alternativ är att låta folk välja ett inloggningsnamn som bara kan innehålla a-z och sedan låta ens riktiga namn vara ett separat fält som kan innehålla vilka tecken som helst. Eller, låta folk logga in med e-postadressen, och låta ens riktiga namn vara ett separat fält.
Att bara tillåta a-z + åäö kan vara lite väl begränsande. Du kanske får besök av norrmän eller danskar som bor i Sverige. Eller folk vars namn slutar med é.
Redan nu har du ett problem. Jag tror att åäö bara matchar små bokstäver, eftersom PHP inte vet något om stora och små svenska bokstäver. Så du lär behöva skriva [\wåäöÅÄÖ\-\s]. Om du inte vill göra Örjan Ärla Ågren sur vill säga.
tack f lektion (som jag glömt om typ åtta minuter...) :r
Det du skriver om ø och é tänkte jag inte ens på. Så då är det ju bättre att släppa in alla tecken (utom de jävligaste.) Hur ska det stå då?
Sedan ser du till escapea datat rätt vid utskrift, t ex med htmlspecialchars. Och om du inte använder någon form av prepared statements (men det gör du väl?) självklart mysql_real_escape_string.
Njae.... vill inte ge mig in i mer sofistikerat fixande. Inte just nu i alla fall.....(nu ere fotboll serru)
Det du skriver om ø och é tänkte jag inte ens på. Så då är det ju bättre att släppa in alla tecken (utom de jävligaste.) Hur ska det stå då?
^[^<>]+$
är alla tecken förutom < och > så vilka de jävligaste är vet jag inte
De jävligaste bör väl öven inkludera ", ' och &. Dock ska väl inte det spela någon roll eftersom strängen ska fixas till på alla ställen där det spelar någon roll. Om man däremot går efter vad som kan förekomma i namn kan jag garantera att inga namn innehåller < eller >. " och & kanske nästan kan ingå i något namn. ' finns däremot definitivt i en del irländska namn.
Men som sagt, kör strängen genom htmlspecialchars vid precis alla utskrifter
så fort OS är över.
^[^<>\"\&]+$ borde duga så länge.