欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

javascript - html5中的input的type属性已经有tel、number、email的,还需要写正则去验证的吗?

程序员文章站 2022-03-29 22:38:27
...
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),那么需要写前端验证功能代码。