ホームページ >バックエンド開発 >PHPチュートリアル >javascript - html5中的input的type属性已经有tel、number、email的,还需要写正则去验证的吗?
1、html5中的input的type属性已经有tel、number、email的,还需要写正则去验证的吗?
2、html5中的input的type属性总共是新增了13个,我把这13个总结了一下,分别是type的这些属性:color(定义拾色器)、date(定义日期字段)、datetime(定义日期字段)、datetime-local(定义日期字段)、month(定义日期字段的月)、week(定义日期字段的周)、time(定义日期字段的时、分、秒)、email(定义用于 e-mail 地址的文本字段)、number(定义带有 spinner 控件的数字字段)、range(定义带有 slider 控件的数字字段)、search(定义用于搜索的文本字段)、tel(定义用于电话号码的文本字段)、url(定义用于 URL 的文本字段)。
平时在做网站的时候用的很少,大家平时写的时候直接用这些的呢,还是需要自己去写正则的,还是用其他标签的去模拟代替的呢?
3、求助一下各位对HTML5新增的这13个type属性的新看法?
1、html5中的input的type属性已经有tel、number、email的,还需要写正则去验证的吗?
2、html5中的input的type属性总共是新增了13个,我把这13个总结了一下,分别是type的这些属性:color(定义拾色器)、date(定义日期字段)、datetime(定义日期字段)、datetime-local(定义日期字段)、month(定义日期字段的月)、week(定义日期字段的周)、time(定义日期字段的时、分、秒)、email(定义用于 e-mail 地址的文本字段)、number(定义带有 spinner 控件的数字字段)、range(定义带有 slider 控件的数字字段)、search(定义用于搜索的文本字段)、tel(定义用于电话号码的文本字段)、url(定义用于 URL 的文本字段)。
平时在做网站的时候用的很少,大家平时写的时候直接用这些的呢,还是需要自己去写正则的,还是用其他标签的去模拟代替的呢?
3、求助一下各位对HTML5新增的这13个type属性的新看法?
不管前端验不验证,后端都一定要验证。
这些类型只是方便浏览器显示不同的控件,并且在手机上会调用不同的键盘,但本质上都是字符串,传到后端都没法保证格式的正确。
前端验证只是用户体验更好,不用像后端验证那样跳转页面(AJAX不用跳转,但还是要传输数据),但是没法保证数据的有效性。
关于这点需要明确一下type
并不能作为验证依据,
type字段只是为输入提供选择格式,
更多情况下应该说新增的type是为了适配移动端web app的存在
例如说当type=tel
的时候,在手机上打开页面会出现电话键盘(不是数字键盘,两者并不一样,电话键盘还包括*
和#
)
当type=email
的时候,会出现带@
和.com
符号的全键盘(各设配各系统实现貌似有差异)
所以才要有pattern
的存在,
当触发表单提交的时候,浏览器会将输入与pattern属性做匹配来最终判断是否有效输入
当然了,后端验证数据有效性就在此问题的范畴之外了
PS 刚刚又试了一下,chrome下当type=email
或者type=url
的时候,触发提交,就算没有pattern
也会对输入内容进行检查然后提示,但是type=tel
却没有,Safari下则是全部都没有进行内容检查,这就是浏览器产商各自实现的差异了,为了保持浏览器行为的一致性,都应该加上pattern
属性
作为一个WEB开发者要考虑 前端用户输的数据都是不可信的 都是有可能会有恶意代码的 后端都要做验证
前后端验证不是可选,而是必须的!况且新增的一些属性在个别手机浏览器上存在兼容问题!
不考虑后端验证,只是说前端验证的话. 该需要验证的地方还是需要验证
比如说 html5 type = email,number等浏览器给你验证了, 但是tel就没有,不知道你是手机号还是座机,tel输入字母也没有做验证。
总的来说,按照具体需求弥补缺失的验证。
@funkyLover 说的挺好。
至于你前两个问题,我认为取决于你的开发需求:对于输入的值的格式、以及浏览器兼容性,有多么严格的要求?
如果数据最终只是用来给人看看而已(比如普通网站的一些个人信息),并且不用兼容早期的浏览器,那么这些type属性自带的验证机制就足够了。
反之,如果数据会被机器利用(比如自动发邮件)或者是关键信息(比如中介网站里的联系电话),或者要兼容早期浏览器(不支持HTML5),那么需要写前端验证功能代码。