webForumDet fria alternativet

Regexp: svenska tecken osv....

12 svar · 1 504 visningar · startad av Danne V

Danne VMedlem sedan aug. 20068 090 inlägg
#1

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?

voigtann1Medlem sedan juni 20019 519 inlägg
#2
/^[\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.

Danne VMedlem sedan aug. 20068 090 inlägg
#3

voigtann1 skrev:

/^[\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)

voigtann1Medlem sedan juni 20019 519 inlägg
#4

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

Danne VMedlem sedan aug. 20068 090 inlägg
#5
/^[\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å?

voigtann1Medlem sedan juni 20019 519 inlägg
#6

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

Danne VMedlem sedan aug. 20068 090 inlägg
#7

voigtann1 skrev:

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 ÅÄÖ.

Danne VMedlem sedan aug. 20068 090 inlägg
#8

voigtann1 skrev:

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!

nitro2k01Medlem sedan aug. 20039 342 inlägg
#9

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.

nitro2k01Medlem sedan aug. 20039 342 inlägg
#10

[] = 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.

Danne VMedlem sedan aug. 20068 090 inlägg
#11

nitro2k01 skrev:

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

nitro2k01 skrev:

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)

voigtann1Medlem sedan juni 20019 519 inlägg
#12

Danne V skrev:

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

nitro2k01Medlem sedan aug. 20039 342 inlägg
#13

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.

143 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)