作者chweng ()
看板RegExp
标题[问题] 用 Javascript 验证 E-mail 信箱
时间Fri Dec 11 11:28:44 2009
想用 Javascript 的 RegExp 来验证 E-mail 信箱,目前是这样写:
<script type="text/javascript"><!--
function check(mail) {
var filter = /^[\w+-.]+@[\w-.]+[a-z]{2,4}$/;
(filter.test(mail)) ? alert('信箱正确') : alert('信箱错误');
}
--></script>
<input id="mail" type="text" />
<button onclick="check(document.getElementById('mail').value)">验证</button>
虽然大致上都没问题,如果像这样
[email protected] 也过不了。
奇怪的是,
[email protected] 还是可以通过验证。
请问是为什麽呢?应该怎麽写才正确呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.116.199.72
1F:推 No:把後面那个.移到[]外面,类似[\w-]+\.[a-z]{2,4} 12/11 16:15
2F:→ No:在里面的话,@xxx.xxxxyzzzzz会因为xxx.xxxxyz可匹配[\w-.]+ 12/11 16:17
3F:→ No:而通过 12/11 16:17
谢谢,不过这样改的话,会变成
[email protected] 这类的信箱过不了。
4F:推 godfat:domain 没有一个字母结尾的啊 12/12 04:05
没错,所以 .x 结尾的信箱过不了,是我希望的结果。
但是 .xxxxx 结尾的信箱却过滤不掉。
※ 编辑: chweng 来自: 140.116.199.72 (12/12 12:25)
5F:推 No:唔~那.. /^[\w+-.]+@[\w-.]+\.[a-z]{2,4}$/ 这样咧? 12/12 15:05
6F:→ No:不过 @. 和 .. 还是会通过就是了 12/12 15:07
7F:推 bcse:但是像 .museum 这麽长的 TLD 是存在的耶~ 12/12 20:44
8F:推 abaddon0305:[\w+-.]+@[a-z]+[\.]{1}[a-z]{1,7}[\.]{0,1}[\w]+ 01/04 18:16