Re: [問題] Javascript驗證email的語法

看板Ajax作者 (you stay there)時間14年前 (2012/04/05 03:16), 編輯推噓1(106)
留言7則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《satoshi3 (Ayanami Satoshi)》之銘言: : 驗證email格式 : 同時含有'@'和'.'字元 : '@'後必須有'.',且中間至少間隔一個字元 你容許的字元應該要再定義一下比較清楚 : '@'不為第一個字元,'.'不為最後一個字元 : '@'前至少3字元以上 : 須為'.com'結尾 : 語法是這樣 : var EmailString=document.MyForm.MyEmail.value; : var strLength=EmailString.length; : var index1=EmailString.indexOf("@"); : var index2=EmailString.indexOf(".",index1); : index3=EmailString.indexOf(".com",EmailString.length-4); : (其實index3這行我不確定究竟要不要var 因為剛試發現都跑得出來) : 宣告變數後 再設定以下條件就可以完成 : if(index1==-1 || index2==-1 || index2<=index1+1 || index1==0 || : index2==strLength-1 || index1<3 || index3!=(EmailString.length-4)) 這種驗證建議可以用正規表達式 會比較輕鬆愉快 假設你容許的字元是英文大小寫 + 數字 + 底限 if(/^\w{3,}@\w+\.(tw|com)$/i.test(EmailString)){ //pass } else{ //not pass } : 我現在的問題在於 如果要將條件修改為 : "驗證結尾必須是.tw或.com" 該怎麼寫比較好? : 我頂多只知道如何只驗證為.com結尾 卻不知如何設定同時驗證是否為.com或.tw的條件 用正規表達式的話 如果需要允許更多種結尾,例如加上 .org 和 .edu 只要修改成這樣就可以了 /^\w{3,}@\w+\.(tw|com|org|edu)$/ 不用正規表達式的話... 這題我要跳過了XDD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.170.138.18 ※ 編輯: No 來自: 118.170.138.18 (04/05 03:17)

04/05 13:01, , 1F
感謝說明!!!
04/05 13:01, 1F

04/05 13:01, , 2F
不知是否能請問/^\w{3,}@\w+\.(tw|com)$/i.test
04/05 13:01, 2F

04/05 13:02, , 3F
(EmailString)這行的詳細解說呢?剛學還不大懂Q_Q
04/05 13:02, 3F

04/05 13:03, , 4F
\w是任意字元(英數底線等)~{3,}表3位元~但,的意義是?
04/05 13:03, 4F
a{3} 為剛好3個連續的a a{3,5} 為3~5個連續的a皆可 a{3,} 為3個以上連續的a皆可 所以 \w{3,} 是匹配"'@'前至少3字元以上"這個規則

04/05 13:04, , 5F
$/i.test~還有這行條件內各個斜線的的意思是?
04/05 13:04, 5F
這邊是呼叫RegExp物件的test方法 /斜線是宣告的格式 \是escape或者像\w

04/05 13:05, , 6F
(EmailString)表示驗證EmailString的值我還明白O_O
04/05 13:05, 6F
JavaScript的正規表達式宣告方法為 var re = new RegExp('pattern', 'flag'); var re = /pattern/flag; 就像Array的宣告一樣,有另一種寫法 var items = new Array(); var items = []; 所以 /^\w{3,}@\w+\.(tw|com)$/i pattern 部分為 ^\w{3,}@\w+\.(tw|com)$ flag 部分為 i flag這邊比較單純,i是忽略大小寫 pattern大概是這樣 ^ 開頭匹配 $ 結尾匹配 \w{3,} @之前至少3個以上\w字元 @ 就是@ \w+ @之後至少一個\w字元 \. 就是. (tw|com)在正規要匹配多個有序字串的可能時,必須要用()做sub pattern |代表or,因此後面可以是 tw 也可以是 com 另外()的用途很多,不限定這樣用而已~ 比較細節的規則和說明可以看一下 我用來教學的參考網站XD http://www.visibone.com/regular-expressions/ ※ 編輯: No 來自: 140.134.26.22 (04/05 13:54)

04/05 21:06, , 7F
再次感謝詳細說明~我懂了Q[]Q!!!(跪)
04/05 21:06, 7F
文章代碼(AID): #1FV9uUYO (Ajax)
文章代碼(AID): #1FV9uUYO (Ajax)