liten fråga kring regular expressions

Permalänk
Medlem

liten fråga kring regular expressions

Har en kontroll som ser över att epost inte innehåller några otillåtna tecken, dvs att enbar bokstäver, siffror, punkt och @ ska finnas med , men med följande

if ($this->content == "email" && preg_match('/[^a-zA-Z0-9.@]/', trim($this->value)))
{
$this->errorMessage = $this->name." contains illegal characters.";
}

så händer ingenting, dvs den påpekar att ex eposten test@test.se innehåller illegala tecken. Så vad är det för miss jag gjort? (testade även att skriva \. och \@ men blir samma sak.)

Är troligen något enkelt, men i denna tidiga morgon/sena natt så ser jag tredubbelt och missar det uppenbara

EDIT: Glöm mitt inlägg, var inget fel på uttrycket, enbart min klass

Visa signatur

AMD Ryzen 9 5900x| Asus ROG Crosshair VIII Dark Hero X570 | G-Skill 32GB DDR4 3600Mhz CL16 Trident | MSI Geforce RTX 3080 10GB Gaming X Trio | Phantek P600S | Creative Sound BlasterX AE-5 Plus | Corsair RM850X 850W | Samsung 980 Pro 1TB M.2 NVME | Kingston A2000 1TB M2. NVME | Corsair H150i Pro XT | Win 10 Home 64
LG 38GN950 | LG Oled 65C1, 65C7 och 55C9
Xbox Series X | Playstation 5 | PSVR 2 | Oculus Quest 2

Permalänk
Citat:

Ursprungligen inskrivet av matt76
Har en kontroll som ser över att epost inte innehåller några otillåtna tecken, dvs att enbar bokstäver, siffror, punkt och @ ska finnas med , men med följande

if ($this->content == "email" && preg_match('/[^a-zA-Z0-9.@]/', trim($this->value)))
{
$this->errorMessage = $this->name." contains illegal characters.";
}

så händer ingenting, dvs den påpekar att ex eposten test@test.se innehåller illegala tecken. Så vad är det för miss jag gjort? (testade även att skriva \. och \@ men blir samma sak.)

Är troligen något enkelt, men i denna tidiga morgon/sena natt så ser jag tredubbelt och missar det uppenbara

EDIT: Glöm mitt inlägg, var inget fel på uttrycket, enbart min klass

Det finns mer officiella regex för email:

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum)\b

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av KurreKula
Det finns mer officiella regex för email:

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum)\b

Som dock inte är bra för då fungerar inte .se adresser.

Visa signatur

Citera om du vill ha svar.

Permalänk
Citat:

Ursprungligen inskrivet av muppens
Som dock inte är bra för då fungerar inte .se adresser.

Förlåt om jag låter sur men orka dryga sig utan att veta? Det gör den visst

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem

Måste instämma med KurreKula, den funkar visst med .se!

Vad får dig att tro att den inte skulle göra det?

Visa signatur

EPoX 8RDA+, XP2500+, 2x256Mb PC3200 (DualCh), Club3D 9800PRO, Seagate 7200.7 160Gb 8Mb Limited edition

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av muppens
Som dock inte är bra för då fungerar inte .se adresser.

Utan att kika allt för noga så är den uppdelat så att parentesen innan '\b' söker topdomäner, delen [A-Z]{2} tordes vara för att representera alla två-bokstavs-domäner, ex. .se, .eu, .cz etc.

Visa signatur

Cat funeral! Cat funeral!
>>> 112383 <<<

Permalänk
Medlem

Jo har en mindre avancerad sådan också, men istället för

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)

före @ borde det väl räcka med att köra [^a-z0-9._], dvs de grundläggande tecknen som finns med i en mejladress

Felet i min if-sats var ju annars att de inte funkade att köra $this->content == "email" ihop med preg_match i samma, men var väl kanske tur i oturen då klassen blev bättre optimerad nu med mindre skräpkod.

Visa signatur

AMD Ryzen 9 5900x| Asus ROG Crosshair VIII Dark Hero X570 | G-Skill 32GB DDR4 3600Mhz CL16 Trident | MSI Geforce RTX 3080 10GB Gaming X Trio | Phantek P600S | Creative Sound BlasterX AE-5 Plus | Corsair RM850X 850W | Samsung 980 Pro 1TB M.2 NVME | Kingston A2000 1TB M2. NVME | Corsair H150i Pro XT | Win 10 Home 64
LG 38GN950 | LG Oled 65C1, 65C7 och 55C9
Xbox Series X | Playstation 5 | PSVR 2 | Oculus Quest 2

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av pscs3
Utan att kika allt för noga så är den uppdelat så att parentesen innan '\b' söker topdomäner, delen [A-Z]{2} tordes vara för att representera alla två-bokstavs-domäner, ex. .se, .eu, .cz etc.

Vilket också borde innebära att ogiltiga domäner som .xx, .zf, .vw och liknande passerar, vilket gör uttrycket värdelöst.

Korrekt validering av epostadresser är ett (mycket!) svårt problem, och på det hela taget meningslöst. Det finns ju ingenting som hindrar en användare att ange en korrekt formaterad men icke-existerande epostadress... och vad har valideringen då tjänat till?

Det finns bättre tekniker för att säkerställa en giltig epostadress, om en sådan nu verkligen krävs.

Permalänk
Citat:

Ursprungligen inskrivet av badboll
Vilket också borde innebära att ogiltiga domäner som .xx, .zf, .vw och liknande passerar, vilket gör uttrycket värdelöst.

Korrekt validering av epostadresser är ett (mycket!) svårt problem, och på det hela taget meningslöst. Det finns ju ingenting som hindrar en användare att ange en korrekt formaterad men icke-existerande epostadress... och vad har valideringen då tjänat till?

Det finns bättre tekniker för att säkerställa en giltig epostadress, om en sådan nu verkligen krävs.

Det blir ju inte värdelöst. Det är bättre att fånga upp så mycket som möjligt så tidigt som möjligt. Som du säger kan man ju ange en giltig men icke existerande epostadress. Men det gör inte uttrycket meningslöst. Nånting blir ju inte meningslöst för att det går att gå runt, då är den mesta säkerheten meingslös. Även om denna är rätt så lätt att gå runt är den ju verkligen inte svår att implementera

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av matt76
Jo har en mindre avancerad sådan också, men istället för

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)

före @ borde det väl räcka med att köra [^a-z0-9._], dvs de grundläggande tecknen som finns med i en mejladress

Felet i min if-sats var ju annars att de inte funkade att köra $this->content == "email" ihop med preg_match i samma, men var väl kanske tur i oturen då klassen blev bättre optimerad nu med mindre skräpkod.

Nej, det räcker inte med a-z0-9._! Varför tillåter du inte + tex? Det är ju ganska vanligt man vill ha med.

Visa signatur

AK47s for everyone! - Angry mob
Since NaN /= NaN, I think, we should decipher 'NaN' as 'Not a NaN' - Miguel Mitrofanov
(Varför är människan så benägen att tro på Gud?) Antagligen har det lönat sig och evolutionen har drivit fram sådana hjärnor. - Anon

Permalänk
Medlem

Kan ju tillägga att det är många sidor som accepterar '+' men klarar inte av det så bra, cdon till exempel, där + verkar ha ersatts med mellanslag eller dragits ihop eller något, så kan inte logga in. Går inte heller att få tillbaka lösenordet!

I skrivande stund så kom jag på att dem kanske dragit ihop adressen, men jag kan ändå inte logga in, jag har glömt mitt lösenord! (alt. att jag skriver rätt lösenord men den har bytt när jag kört "glömt lösenord".

Citat:

Ursprungligen inskrivet av badboll
[...]

Mjo, det sätter jag inte mot, påpekade mest att den klarade .se som komplement till de andra kommentarerna.

Visa signatur

Cat funeral! Cat funeral!
>>> 112383 <<<

Permalänk
Medlem

Ja exakt hur den ska se ut är det nog många som har åsikter om, men överlag är det ju även trevligt, säkerhetsmässigt, att implementera lite andra lösningar runtomkring också, ex bekräftelse av epost, manuell aktivering osv beroende på vad sidan handlar om och vilken typ av sida det är.

Visa signatur

AMD Ryzen 9 5900x| Asus ROG Crosshair VIII Dark Hero X570 | G-Skill 32GB DDR4 3600Mhz CL16 Trident | MSI Geforce RTX 3080 10GB Gaming X Trio | Phantek P600S | Creative Sound BlasterX AE-5 Plus | Corsair RM850X 850W | Samsung 980 Pro 1TB M.2 NVME | Kingston A2000 1TB M2. NVME | Corsair H150i Pro XT | Win 10 Home 64
LG 38GN950 | LG Oled 65C1, 65C7 och 55C9
Xbox Series X | Playstation 5 | PSVR 2 | Oculus Quest 2

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av KurreKula
Det blir ju inte värdelöst. Det är bättre att fånga upp så mycket som möjligt så tidigt som möjligt. Som du säger kan man ju ange en giltig men icke existerande epostadress. Men det gör inte uttrycket meningslöst. Nånting blir ju inte meningslöst för att det går att gå runt, då är den mesta säkerheten meingslös. Även om denna är rätt så lätt att gå runt är den ju verkligen inte svår att implementera

Jo, det är värdelöst.

1) Syftet med den föreslagna valideringen är att fånga upp ogiltiga epostadresser och underkänna dessa.

2) Valideringen misslyckas med ovanstående.

3) Istället är risken överhängande att uttrycket underkänner epostadresser som faktiskt är giltiga. Det blir inte drabbade användare glada av!

1 + 2 + 3 = valideringen fyller inte sitt syfte. Släng lösningen i papperskorgen och hitta en annan, eller släpp valideringen helt om korrekta epostadresser inte är så viktigt trots allt.

Permalänk
Medlem

För min del handlar det bara om att den innehåller en någorlunda korrekt struktur, enbart med de tecken som skall ingå. Själva kontroll om det är en äkta fungerande adress görs sedan genom antingen utskick med lösenord till adress eller mer troligt ett valideringsutskick för aktivering av kontot, dvs de gamla vanliga metoderna.

Visa signatur

AMD Ryzen 9 5900x| Asus ROG Crosshair VIII Dark Hero X570 | G-Skill 32GB DDR4 3600Mhz CL16 Trident | MSI Geforce RTX 3080 10GB Gaming X Trio | Phantek P600S | Creative Sound BlasterX AE-5 Plus | Corsair RM850X 850W | Samsung 980 Pro 1TB M.2 NVME | Kingston A2000 1TB M2. NVME | Corsair H150i Pro XT | Win 10 Home 64
LG 38GN950 | LG Oled 65C1, 65C7 och 55C9
Xbox Series X | Playstation 5 | PSVR 2 | Oculus Quest 2

Permalänk
Medlem

Skippa då regexvalidering helt för att undvika eventuella problem och dessutom spara arbete. Du gör ju en kontroll senare som gör den första kontrollen helt onödig...

Permalänk
Citat:

Ursprungligen inskrivet av badboll
Jo, det är värdelöst.

1) Syftet med den föreslagna valideringen är att fånga upp ogiltiga epostadresser och underkänna dessa.

2) Valideringen misslyckas med ovanstående.

3) Istället är risken överhängande att uttrycket underkänner epostadresser som faktiskt är giltiga. Det blir inte drabbade användare glada av!

1 + 2 + 3 = valideringen fyller inte sitt syfte. Släng lösningen i papperskorgen och hitta en annan, eller släpp valideringen helt om korrekta epostadresser inte är så viktigt trots allt.

Jag skulle snarare säga att om man implementerar den korrekt fångar man upp användare som skriver fel av misstag istället och då blir de glada istället. Du utgår ifrån att man implementerar den fel. Gör man inte det kan man fånga upp, om än ett fåtal, folk som bara skriver in konstiga saker. I min mening är det bättre att fånga upp så mycket som möjligt innan man börjar få in skit i systemet. Även om det såklart rensas så känns det onödigt att servern ska slösa resurser för att skicka ut mail till bajs@bajs.com...

Men det är en smaksak, att säga att det är värdelöst är att blanda ihop fakta och egen åsikt...

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av KurreKula
Jag skulle snarare säga att om man implementerar den korrekt fångar man upp användare som skriver fel av misstag istället och då blir de glada istället. Du utgår ifrån att man implementerar den fel. Gör man inte det kan man fånga upp, om än ett fåtal, folk som bara skriver in konstiga saker. I min mening är det bättre att fånga upp så mycket som möjligt innan man börjar få in skit i systemet. Även om det såklart rensas så känns det onödigt att servern ska slösa resurser för att skicka ut mail till bajs@bajs.com...

Men det är en smaksak, att säga att det är värdelöst är att blanda ihop fakta och egen åsikt...

Vad har du för regexp som säger att bajs@bajs.com inte är en valid epostadress?

Om en människa skriver "skit" i fälten så kan du aldrig validera om det är korrekt eller inte.

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Citat:

Ursprungligen inskrivet av Leedow
Vad har du för regexp som säger att bajs@bajs.com inte är en valid epostadress?

Om en människa skriver "skit" i fälten så kan du aldrig validera om det är korrekt eller inte.

haha, dåligt exempel :/

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase