Re: [問題] Javascript驗證email的語法
※ 引述《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
04/05 13:01, 2F
→
04/05 13:02, , 3F
04/05 13:02, 3F
→
04/05 13:03, , 4F
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
04/05 13:04, 5F
這邊是呼叫RegExp物件的test方法
/斜線是宣告的格式
\是escape或者像\w
→
04/05 13:05, , 6F
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
04/05 21:06, 7F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):