<html> <head> <script type="text/javascript"> function validate_email(field, alerttxt) { with(field) { apos = value.indexOf("@") dotpos = value.lastIndexOf(".") if(apos < 1 || dotpos - apos < 2) { alert(alerttxt); return false } else { return true } } } function validate_form(thisform) { with(thisform) { if(validate_email(email, "Not a valid e-mail address!") == false) { email.focus(); return false } } } </script> </head> <body> <form action="submitpage.htm"onsubmit="return validate_form(this);" method="post"> Email: <input type="text" name="email" size="30"> <input type="submit" value="Submit"> </form> </body> </html>
1、如何改进可以验证邮件地址 输入的数据包含 @ 和点(.)。@ 不可以是邮件地址的首字符,并且 @ 之后需有至少一个点号?
2、函数中的 with 是什么作用?
3、email.focus()获得焦点在这个地方什么作用
第一个问题
验证邮箱格式最好使用正则表达式
首先阐述Email Address格式。
Email Address格式为
local-part@domain
,Local Part和Domain Part两部分。在Local Part中允许以下字符:
"(),:;<>@[\]
它们必须出现在引号"
之中,同时对于\"
而言,它们在引号中还需要使用\
转义,即"\\\""
john.smith(comment)@example.com
和(comment)john.smith@example.com
等同于john.smith@example.com
Domain Part可以是hostname或者有方括号包围的ip地址。hostname只能由字母,数字以及
-.
组成。注释在Domain Part中也是被允许的。代码实现
http://jsfiddle.net/cattail/bYZcL/
当前该代码存在的主要缺陷
just"not"right@example.com
的检验存在问题第二个问题
with
能够暂时改变语句中的作用域。它通过with后面的对象所拥有的属性拓展作用域。如field
是一个input element,拥有属性value
,因而在with语句中可以使用value来读取input中的值。然而,并不推荐使用
with
,在Javascript的strict mode中,它是被禁止的。因为使用with
语句使得Javascript代码的优化更加困难,因而会降低代码的运行速度。更中要的是,如果传入with
的对象不具有在语句中使用的属性,该属性可能会从全局对象读取或者修改,因而造成难以察觉的错误。第三个问题
聚焦使得当提示用户邮箱输入错误时,使得光标聚焦在email输入框中,便于用户修改。
参考资料
Wikipedia-email address:http://en.wikipedia.org/wiki/Email_ad...
Github gist地址:https://gist.github.com/4191834
Validate email address in Javascript http://stackoverflow.com/questions/46...
How far should one take e-mail address validation?http://programmers.stackexchange.com/...
合法的email地址
非法email地址
来自<Javascript权威指南6>对于with的解读
document.forms[0].address.value
with(o) x = 1;