Permalänk
Medlem

email validate

jag har skapat en simpel gui med tre fält som hanterar namn, efternamn och email.
Jag vill lägga in en email validator när knappen för submit klickas på.
Jag har försökt klura ut hur man enklast löser det. Kan någon här ge mig lite tips och hjälp på vägen?

Här är min kod:

import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; public class Blabla extends javax.swing.JFrame { private boolean result; public Blabla() { initComponents(); } @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { textArea1 = new java.awt.TextArea(); jTextField = new javax.swing.JTextField(); jTextField2 = new javax.swing.JTextField(); emailAddr = new javax.swing.JTextField(); Submit = new java.awt.Button(); clear = new java.awt.Button(); button1 = new java.awt.Button(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jTextField.setText("firstname"); jTextField2.setText("Lastname"); emailAddr.setText("Email"); Submit.setLabel("Submit"); Submit.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { SubmitActionPerformed(evt); } }); clear.setActionCommand("Clear"); clear.setLabel("Clear"); clear.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { clearActionPerformed(evt); } }); button1.setLabel("Exit"); button1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { button1ActionPerformed(evt); } }); org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .add(64, 64, 64) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(emailAddr, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 302, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(jTextField2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 302, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(jTextField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 302, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(layout.createSequentialGroup() .add(button1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 83, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(clear, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 83, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(Submit, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 83, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))) .addContainerGap(34, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .add(17, 17, 17) .add(jTextField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) .add(jTextField2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) .add(emailAddr, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(38, 38, 38) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(button1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(clear, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(Submit, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .addContainerGap(113, Short.MAX_VALUE)) ); pack(); }// </editor-fold> private void SubmitActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: } private void clearActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: jTextField.setText(""); jTextField2.setText(""); emailAddr.setText(""); } private void button1ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: System.exit(0); } /** * @param args the command line arguments */ public static void main(String args[]) { /* Set the Nimbus look and feel */ //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfee... */ try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(Blabla.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(Blabla.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(Blabla.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(Blabla.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } //</editor-fold> /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { @Override public void run() { new Blabla().setVisible(true); } }); } // Variables declaration - do not modify private java.awt.Button Submit; private java.awt.Button button1; private java.awt.Button clear; private javax.swing.JTextField emailAddr; private javax.swing.JTextField jTextField; private javax.swing.JTextField jTextField2; private java.awt.TextArea textArea1; // End of variables declaration }

la till code-taggar
Permalänk
Medlem

Det gör du nog enklast via Regex (reguljära uttryck).

java guide http://www.tutorialspoint.com/java/java_regular_expressions.h...
här kan du testa dina strängar: http://www.regex101.com

edit: Det här reguljära uttrycket för att validera mejladresser är taget från ett av mina gamla program. Är kanske inte 100% perfekt men dög för mina behov. Det är iaf ett sätt att göra det på.

^\s{0}[-.a-zA-Z0-9_]*@[-.a-zA-Z0-9_]+(\.[-.a-zA-Z0-9_]+)*\.(com|edu|info|gov|int|mil|net|org|biz|name|museum|coop|aero|pro|tv|se|nu|[a-zA-Z]{2})

Visa signatur

| Ryzen 5800x | Asus prime x470 pro | Asus rtx 3080 tuf oc | Gskill 32gb 3,6ghz | aw3225qf |

Permalänk
Hedersmedlem

Kolla så fint det blir när man innesluter sin kod med [code][/code]

Mvh
Moderator Shimonu

Permalänk
Medlem
Skrivet av Ragin Pig:

edit: Det här reguljära uttrycket för att validera mejladresser är taget från ett av mina gamla program. Är kanske inte 100% perfekt men dög för mina behov.

^\s{0}[-.a-zA-Z0-9_]*@[-.a-zA-Z0-9_]+(\.[-.a-zA-Z0-9_]+)*\.(com|edu|info|gov|int|mil|net|org|biz|name|museum|coop|aero|pro|tv|se|nu|[a-zA-Z]{2})

Det är absolut INTE 100% perfekt med tanke på alla nya TLDer som släpps samt att du inte ens verkar tillåta "+".

Permalänk
Medlem

För att "validera" e-postadressen bör du använda ett reguljärt uttryck (även kallat regex). På så sätt kan du kontrollera ett e-postadressen följer vissa mönster gemensamma för alla e-postadresser. Men utöver att endast validera e-postadressen genom reguljära uttryck bör du om möjligt även skicka ut ett mail för att bekräfta att användaren kan komma åt den e-postadress denne uppgivit (givetvis beror ju detta på vad för typ av program/tjänst det handlar om).

Visa signatur

Citera för svar!

Stationär: Fractal Design Define R6 | Asus Z370-P | Intel i7 8700k @ 3.7 Ghz | Corsair Vengeance LPX 32GB CL15 @ 3000 Mhz | Asus STRIX GTX960 4GB | Fractal Design Celsius S24 | 5 TB HDD | 250GB SSD (Samsung 850 EVO), 128GB SSD (Crucial M4) | Corsair HX 850W | W10
Bärbar: Sony Vaio Pro 13.3" | i7-4500U | 8GB RAM | 256GB SSD | Ubuntu

Permalänk
Inaktiv

Tänk även på att HTML5 har inyggd validering så användaren snabbt kan se om den skrivit rätt Sen får du givetvis validera serverside också!

Här finns regex du kan använda för att validera http://www.regular-expressions.info/email.html.

Inklusive standarden:

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)* | "(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f] | \\[\x01-\x09\x0b\x0c\x0e-\x7f])*") @ (?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])? | \[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3} (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]: (?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f] | \\[\x01-\x09\x0b\x0c\x0e-\x7f])+) \])

Permalänk
Avstängd

Regex är vad som gäller, men det beror också förstås på hur mycket validering man vill ha. Räcker det med exempelvis: "[ett eller flera tecken]@[ett eller flera tecken].[två-fyra tecken]" så är det inte så komplicerat direkt. Lite värre blir det om du ska sortera bort toppdomäner som inte finns, då måste du ju specificera alla godkända, typ som Ragin Pig gjorde. Sen kan du förstås sortera bort tecken som inte tillåts i en epostadress osv. Frågan är varför du ska validera epostadressen så noga, du kan inte få bort stavfel eller hindra någon från att mata in någon annans adress ändå liksom. Det du kan göra med en regex är att få folk att märka ifall de typ har skrivit komma istället för punkt eller har med ett mellanslag eller liknande och då behöver den inte vara så jäkla komplicerad. Enda sättet att validera en epost helt är att skicka ett bekräftelsemail och vänta på ett klick på bekräftelselänken.

Det finns en del matnyttigt i denna stackoverflow: http://stackoverflow.com/questions/201323/using-a-regular-exp...

Permalänk
Hedersmedlem

Om du vill göra detta så rekommenderar jag att använda något färdigt bibliotek. Det finns myriader av specialfall som man inte ensam vill behöva hålla reda på, och det är onödigt att återuppfinna hjulet (när det dessutom blir sämre än det som redan finns).

Dessutom ska man minnas skillnaden mellan en "giltig emailadress" och en "existerande emailadress" — validering av det senare bör man ju ändå göra om man ska använda adressen till något vettigt. Kanske är det inte jätteviktigt överhuvudtaget att kontrollera om en användare anger en korrekt emailadress (ett testmail ger ju ändå det enda användbara svaret): för en användare som vill ange en fejkadress så går det ju lika bra att skriva "a@example.com" som "asdf", så vem är det egentligen man hjälper genom att validera strängen? Någon som råkar glömma ett "@" i sin adress? De kan ju lika gärna råka skriva "nisl@hotmail.com" i stället för "nils@hotmail.com", och en validator kan ju då på egen hand omöjligen veta vad som är rätt eller fel. Det är ett ganska litet spann man faktiskt fångar upp.

Söker man likväl efter en sådan färdig lösning så ser man att Apache Commons Validator oftast rekommenderas. Det verkar också finnas en "officiell" funktion för detta i Java, även om den verkar vara överdrivet frikostigt med vad som validerar [SO; se kommentarer till svaret].

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Medlem

Validering av e-postadresser ger egentligen inget, och blir lätt ruskigt komplicerat (det finns sjuttielva olika regex-exempel men ingen är perfekt). Skicka ett testmail istället (lägg till en knapp "Test" bredvid fältet, t.ex.).

Visa signatur

5950X, 3090

Permalänk
Medlem
Skrivet av iXam:

Det är absolut INTE 100% perfekt med tanke på alla nya TLDer som släpps samt att du inte ens verkar tillåta "+".

Vaknat på fel sida idag? Nu var mitt reguljära uttryck mest menat som ett exempel för ts, därför jag skrev att det inte var 100% perfekt.

Alla tld's med två bokstäver fångas. Längre versioner som kan dyka upp blir ju problematiska men allt som inte matchades skickades till manuell kontroll så det spelade inte så stor roll för _mig_. + tecknet hade jag dock inte tänkt på så tack för det

Visa signatur

| Ryzen 5800x | Asus prime x470 pro | Asus rtx 3080 tuf oc | Gskill 32gb 3,6ghz | aw3225qf |

Permalänk
Medlem
Skrivet av Ragin Pig:

Vaknat på fel sida idag? Nu var mitt reguljära uttryck mest menat som ett exempel för ts, därför jag skrev att det inte var 100% perfekt.

Alla tld's med två bokstäver fångas. Längre versioner som kan dyka upp blir ju problematiska men allt som inte matchades skickades till manuell kontroll så det spelade inte så stor roll för _mig_. + tecknet hade jag dock inte tänkt på så tack för det

Nä, jag är surgubbe varenda dag
Sen skrev du att det *kanske* inte är perfekt och då påtalade jag att det inte var i närheten av det.
Det godkänns nya TLDer "hela tiden" (stöter på dem via notify list samt mitt project DNSDigger.com) och för att inte skjuta sig själv i foten med dåliga regexps så skulle jag köra med "*@*" + valideringsmail.

Mer läsning : http://stackoverflow.com/questions/201323/using-a-regular-exp...

(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t] )+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?: \r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:( ?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\0 31]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\ ](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+ (?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?: (?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z |(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n) ?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\ r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n) ?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t] )*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])* )(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t] )+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*) *:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+ |\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r \n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?: \r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t ]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031 ]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\]( ?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(? :(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(? :\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(? :(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)? [ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]| \\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<> @,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|" (?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t] )*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\ ".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(? :[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[ \]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000- \031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|( ?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,; :\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([ ^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\" .\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\ ]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\ [\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\ r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\] |\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \0 00-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\ .|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@, ;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(? :[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])* (?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\". \[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[ ^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\] ]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)(?:,\s*( ?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\ ".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:( ?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[ \["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t ])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t ])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(? :\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+| \Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?: [^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\ ]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n) ?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[" ()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n) ?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<> @,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@, ;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t] )*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\ ".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)? (?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\". \[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?: \r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[ "()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t]) *))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]) +|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\ .(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z |(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:( ?:\r\n)?[ \t])*))*)?;\s*)

Permalänk
Medlem
Skrivet av iXam:

Sen skrev du att det *kanske* inte är perfekt och då påtalade jag att det inte var i närheten av det.

Fair enough

Skrivet av iXam:

Det godkänns nya TLDer "hela tiden" (stöter på dem via notify list samt mitt project DNSDigger.com) och för att inte skjuta sig själv i foten med dåliga regexps så skulle jag köra med "*@*" + valideringsmail.

Ja en mer tillåtande regex som det där borde vara att föredra i dom flesta fall (eller att använda ett bibliotek som någon föreslog).

Tog bort onödigt sidospår.
Visa signatur

| Ryzen 5800x | Asus prime x470 pro | Asus rtx 3080 tuf oc | Gskill 32gb 3,6ghz | aw3225qf |

Permalänk
Medlem

Varför funkar inte denna kod?

Hej!
Jag försöker på mig en emailvalidering i Java och har följt ett exempel på youtube men håller på bli tokig.
Fattar inte varför jag får "not valid" oavsett vad jag skriver in.
Kan någon vänlig själ hjälpa mig, tack på förhand!

public class Validate { public static boolean validateEmail(String email) { boolean status = false; String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-¤]+)*@" + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\¤.[A-Za-z]{2,})$"; Pattern pattern = Pattern.compile(EMAIL_PATTERN); Matcher matcher = pattern.matcher(email); if (matcher.matches()) { status = true; } else { status = false; } return status; } } private void jToggleButton1ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: boolean status = Validate.validateEmail(jTextField1.getText()); if (status) { jLabel2.setText("Email Valid"); } else { jLabel2.setText("Not Valid Email"); }

la till code-taggar
Permalänk
Medlem

1. Använd [code] taggar
2. Använd inte regexp för att kolla om en mail adress är giltigt, kolla bara om den innehåller ett @ och en . (punk). Din regexp kod kommer blocka massa giltiga adresser tex exempel+blabla@exempel.com eller åäö@åäö.se eller

Men om du absolut älskar regex så ska du inte skriva den själv utan använda RFC standarden:

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)* | "(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f] | \\[\x01-\x09\x0b\x0c\x0e-\x7f])*") @ (?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])? | \[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3} (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]: (?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f] | \\[\x01-\x09\x0b\x0c\x0e-\x7f])+) \])

btw;

if (matcher.matches()) { status = true; } else { status = false; } return status;

är samma sak som

return matcher.matches();

Visa signatur

Programmerare -> PHP | HTML | CSS | JS | Java.

Permalänk
Medlem

Är nybörjare, så hur ska mina kodblock se ut för att koden ska fungera?
Försökte klistra in dina svar men fortfarande ingen lycka...

Permalänk
Hedersmedlem

*Trådar sammanfogade*

Observera att vi, av rättviseskäl, inte tillåter flera trådar om samma eller snarlik frågeställning. Dina trådar gör ju att andras trycks undan vilket inte är fair. Denna gången har jag sammanfogat, men kom i fortsättningen ihåg att denna regeln finns.

Citat:

§ 3.3 Det är inte tillåtet att skapa flera trådar om samma ämne (så kallad korspostning). Detta gäller oavsett om trådarna placeras i samma forumdel eller i olika forumdelar. Om en moderator har låst en tråd är det inte tillåtet att skapa en ny tråd om samma ämne. Regeln finns för att alla ska få samma chans att få sina trådar uppmärksammade och för att forumet ska bli så överskådligt som möjligt.

/moderator

Visa signatur

Danskjävel så krattar som en skrivare...

Permalänk
Medlem
Skrivet av Sony?:

1. Använd [code] taggar
2. Använd inte regexp för att kolla om en mail adress är giltigt, kolla bara om den innehåller ett @ och en . (punk). Din regexp kod kommer blocka massa giltiga adresser tex exempel+blabla@exempel.com eller åäö@åäö.se eller

Och ditt förslag kommer blocka name@tld dock så är det kanske inte så troligt att någon har en MX på en TLD men någon ägare av framtida nya TLDer kanske kommer ha det som en gimmick. Typ Google fixar gmail som TLD.
Så det som gäller är att kolla *@*

Permalänk
Medlem

Om jag väljer att använda mig av följade kod, hur gör jag för att koppla det så boolean ska kunna returnera true/false.
Tacksam för svar.

package com.mkyong.regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class EmailValidator {

private Pattern pattern;
private Matcher matcher;

private static final String EMAIL_PATTERN =
"^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
+ "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";

public EmailValidator() {
pattern = Pattern.compile(EMAIL_PATTERN);
}

/**
* Validate hex with regular expression
*
* @param hex
* hex for validation
* @return true valid hex, false invalid hex
*/
public boolean validate(final String hex) {

matcher = pattern.matcher(hex);
return matcher.matches();

}
}