Just nu i M3-nätverket
Jump to content

verifiera mail adress


Mathias

Recommended Posts

Har en sida där jag vill att "användaren" ska skriva in sin e-post. Kan man på någon sätt kolla så det verkligen är en e-post adress?

 

Link to comment
Share on other sites

NoiseKiller

Klart du kan. :)

  function IsEmail(strEmail)
   Dim strTemp
   strEmail = CStr(strEmail)
   if Not InStr(strEmail, "@") > 0 Then
   IsEmail = "@-tecken saknas."
   Exit function
   End if
   if Not InStr(strEmail, ".") > 0 Then
   IsEmail = "Adressen saknar nödvändig punkt."
   Exit function
   End if
   if Not Len(Left(strEmail, Instr(strEmail, "@") - 1)) => 3 Then
   IsEmail = "Adressen före @-tecknet är för kort."
   Exit function
   End if
   strTemp = Mid(strEmail, InStr(strEmail, "@") + 1, Len(strEmail))
   if Not Len(Left(strTemp, InStr(strTemp, ".") - 1)) => 3 Then
   IsEmail = "Domän-namnet är för kort."
   Exit function
   End if
   if Not Len(Right(strTemp, Len(strTemp) - Instr(strTemp, "."))) => 2 Then
   IsEmail = "Adressen efter punkten är för kort."
   Exit function
   End if
   dim adress
   adress = Right(strEmail, (Len(strEmail) - Instr(strEmail, "@")))
   IsEmail = "True"
   End function

Pula du lite med den så förstår du nog hur den funkar sen.

 

[inlägget skrivet av NoiseKiller]

 

Link to comment
Share on other sites

Tack för hjälpen!

 

Hur och vart ska jag lägga in koden?

 

kod:

<form method="post" action="index.asp?reg=skicka">

<b>e-post</b><br>

<input name="epost">

</form>

 

If Request.QueryString("reg") = "skicka" Then

SQL ="INSERT INTO MEMBERS(epost) Values("& Request.Form("epost")) &"')"

Conn.Execute(SQL)

 

Response.Redirect "index.asp?reg=klar"

 

Link to comment
Share on other sites

Anjuna Moon

Eller så gör du det den kortare vägen, med hjälp av regular expressions:

 

Function IsMail(strMail)
 Dim regEx, retVal
 Set regEx = New RegExp
 regEx.Pattern = "^([A-Za-z_\.]*)@([A-Za-z_]*)\.([A-Za-z_\.]*)$"
 IsMail=  regEx.Test(strMail)
End Function

response.write IsMail("christopher@nospam.itmanagement.net")

 

Funktionen returnerar True eller False beroende på om adressen är godkänd eller ej.

 

[inlägget ändrat 2004-03-11 11:22:33 av Anjuna Moon]

Link to comment
Share on other sites

:)

 

Det går att göra koden betydligt kortare, här är den funktion jag använder mig av:

function isEmail(str)
Dim rExp
Set rExp = New RegExp
rExp.Pattern = "^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"
isEmail = rExp.Test(str)
Set rExp = Nothing
End function

 

Sedan kan du använda det så här:

 

if (isEmail("alias@domain.se")) then
' ok 
else
' felaktig email
end if

 

Men dina besökare kan fortfarande lura scriptet genom att ange en felaktig email men som ser korrekt ut, tex

hejhopp@ingenmail.com

 

 

Link to comment
Share on other sites

Det finns dessvärre en del fel i ditt script ovan Anjuna, email-adresser med siffror i kommer inte godkännas :/

 

Det är inte så vanligt att email-adresser innehåller siffror bland företag men bland privatpersoner är det desto vanligare.

 

Det finns fler luckor, tex godkännes "minmail@.." som en acceptabel adress.

 

 

Mitt script är säkerligen inte heller helt 100% felsäkert, har inte orkat läsa RFC'n ännu ;)

 

Link to comment
Share on other sites

Hur lägger jag in det i min kod? Är inte så jävla bra

på asp :)

 

kod:

<form method="post" action="index.asp?reg=skicka">

<b>e-post</b><br>

<input name="epost">

</form>

 

If Request.QueryString("reg") = "skicka" Then

SQL ="INSERT INTO MEMBERS(epost) Values("& Request.Form("epost")) &"')"

Conn.Execute(SQL)

 

Response.Redirect "index.asp?reg=klar"

 

 

Link to comment
Share on other sites

Anjuna Moon

Helt korrekt dAEk^, slarvade lite där. \w är såklart den bästa vägen att gå.

 

Till Mathias (använd dAEK^s variant):

 

If Request.QueryString("reg") = "skicka" Then 
epost=isEmail(Request.Form("epost"))
SQL ="INSERT INTO MEMBERS(epost) Values('"& epost &"')"
Conn.Execute(SQL)

 

[inlägget ändrat 2004-03-11 12:03:04 av Anjuna Moon]

Link to comment
Share on other sites

Skulle vilja tillägga att egentligen är validering av mailadresser nästan bättre att göra på klientsidan (mao Javascript). För det första är det väldigt svårt att konstruera ett reguljärt uttryck som matchar alla tänkbara format på mailadresser men inga ogiltiga. För det andra är det ingen konst att konstruera en till formen korrekt mailadress som inte existerar.

 

Vill man vara säker på att en mailadress är korrekt får man skicka ett mail som användaren får svara på eller som innehåller en kod/länk som kan användas för validering.

 

Om man använder Javascript kan man använda valideringen mer som hjälp för användaren om hon gör ett uppenbart misstag (inget @, felstavad toppdomän osv) och man kan göra kollen utan att formuläret behöver skickas.

 

Link to comment
Share on other sites

Nja, både en klient & server-lösning är ju det bästa när det gäller verifiering av data.

 

Klientlösningen som stöd för användaren, och precis som du skriver, att slippa ladda om sidan varje gång man gör fel.

 

Serverlösningen för de utan javascriptstöd eller med det avslaget, samt som en sista kontroll att det som skickades verkligen är vad som förväntas.

 

js-lösningar är oftast väldigt enkela att komma förbi men om det inte är så noga med att man verkligen får in en email-adress som är giltig till formatet så kan man ju strunta i serverdelen [även om jag inte skulle gjort det].

 

 

Link to comment
Share on other sites

Jo, men det jag menar är att det är meningslöst att försöka validera mailadresser genom att titta på formen. Antingen fyller användaren i en fungerande mailadress, som det går att maila till, eller så gör hon inte det. Det spelar ingen roll om användaren skriver blablabla@ingenstans.com eller d3lk!!!Lkj$&%&*^, det går inte att skicka mail dit hursomhelst. Förutsatt förstås att man nånstans i koden förutsätter att mailadresser ska se ut på ett visst sätt -- jag vet inte, man kanske vill plocka ut domändelen eller nåt. I så fall måste man se till att man får rätt format på mailadressen.

 

Självklart ska man alltid kolla all indata från användare på serversidan och se till att det inte kan ställa till några problem. Eko: Validering på klientsidan är bara till för att underlätta för användaren, inte för att försäkra sig om att man inte får in ogiltiga (och potentiellt farliga) indata i sin applikation.

 

Link to comment
Share on other sites

Jag ser din poäng men tycker fortfarande ändå att man borde kontrollera formen på emailadressen som användaren anger, skall man spara emailadresser skall man spara emailadresser som är korrekta, sedan om användaren 'luras' genom att hitta på en email, ja, det kan man lösa genom det sätt du föreslog, men frågan är om det är värt det? Det beror på vad man ska ha adresserna till. Men det minsta man kan/borde göra enligt min mening är att kontrollera att det användaren fyllt i uppfyller kraven för en emailadress.

 

Skulle jag tex spara användarnas tele.nr[inkl. riktnummer & allt] skulle jag kontrollera att det verkligen är ett tele.nr jag får in, men jag kan inte verifiera att det är ett giltigt nummer, men jag kan kontrollera att det följer standarden för tele.nr.

 

Dåligt exempel kanske, jag vet inte :)

 

 

Link to comment
Share on other sites

Har fixat till Ajunas kod lite:

 

//

rExp.Pattern = "^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)+$"

//

 

Link to comment
Share on other sites

Får inte funktionen att fungera!

Vad gör jag för fel???

 

kod:

<form method="post" action="epost.asp?view=check">

<b>Epost:</b><br>

<input type="text" name="epost"><br>

<input name="Submit" type="submit" value="Submit">

</form>

<%

function isEmail(str)

Dim rExp

Set rExp = New RegExp

rExp.Pattern = "^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)+$"

isEmail = rExp.Test(str)

Set rExp = Nothing

End function

%>

 

<%

If Request.QueryString("view") = "check" Then

if (isEmail(Request.Form("epost"))) then

Response.Write "ok"

else

Response.Write "felaktig email"

end if

end if

%>

 

Link to comment
Share on other sites

Du matchar ju inte @ i din regexp, så alla e-postadresser som innehåller @ kommer kallas felaktiga. :)

 

Det är nog eforum som har strulat till det för dig när du kopierade det :)

 

Kollade i en gammal kod jag hade, och där hade jag följande regexp.. Den borde fungera tillräckligt bra..

^[a-zA-Z0-9\-\.\_]+@[a-zA-Z0-9][a-zA-Z0-9\-\.\_]*[a-zA-Z0-9]\.[a-zA-Z]{2,4}$

 

Ciao,

Anders

 

[inlägget ändrat 2004-03-16 09:59:44 av Anders N]

Link to comment
Share on other sites

  • 5 months later...

Fan va surt!

Jag satt o svor o kunde inte fatta att ni fått det funka...

Så läser jag "Det är nog eforum som har strulat till det för dig när du kopierade det"!

 

Klart det har!

 

Tack för tråden... och frågan!

 

/Montan

 

 

Link to comment
Share on other sites

Jo, det här problemet med at-tecknet tycker jag nog kunde göras av med. Det är viktigt att det fungerar som det gör i profilerna, men slänger man in ett "at" i en tråd tycker jag inte den ska ersättas med en bild, framförallt inte i databasforumet.

 

Link to comment
Share on other sites

Eforum skulle ha haft nån funktion för att avgöra om @-tecknet är placerat i en epostadress eller inte....... :]

Rör det sig om en adress ersätts den med en bild, annars får den stå kvar som ett tecken.

 

\\Anp

 

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...