前言:在业务中,经常遇到也就4种情况:布局、业务逻辑、表单、动态交互,其中最折磨我的就是表单了。
表单涉及到大概3中情况:1--既要能新建、又能修改,2--表单中的多种输入校验,3--表单提交时的数据校验、交互。
本文主要讲第二种情况——表单的校验,首先介绍一些基础的正则函数,然后介绍表单校验中用到的JS事件。
输入框事件校验概览图
输入框正则校验常用到的方法
1.字符串中使用到正则的函数
String.match(regexp)
:返回匹配的值,如果有g
标志,则返回一个数组
string.search(stirng/regexp)
:返回和正则表达式匹配的子字符串的起始位置
string.replace(regexp, string)
:用string
替换被匹配的字符串
string.split(regexp/string)
:返回数组
2.new Regexp()
:正则匹配
new Regexp().test(string)
:返回true\false
new Regexp().exec(string)
:返回被匹配的字符串
以上是输入框校验需要掌握的一些基础知识,针对某些特殊字符的校验规则这里就不一一提交了,百度一搜一大片,最重要的是在遇到以后积累下来,下次可以直接用!
推荐一个总结的比较好的正则校验总结
中文输入法和非中文输入法,事件对比
针对中文输入法,提供了compositionstart、compositionupdate、compositionend
事件,其中 compositionstart
会在中文输入法开始就触发,upate
会在不断输入字符时触发,end
事件和input
事件的触发顺序,各个浏览器的实现,有所不同。需要做兼容哦!!
针对中文和非中文的输入事件,做了一个时间轴的总结,可以对比着看。
非中文输入法事件
输入英文字符f时,具体输出如下:
中文输入法事件
输入中文字符时,具体输出如下:
先触发
keydown--> compositionstart-->compositionupdate-->onInput
,然后重复该过程,直到组合结束触发compositionend
事件。虽然chrome
下,end
事件在onInput
后触发,但不同浏览器实现不一样,记得要兼容哦!提供一个兼容写法
compositionend
事件:等组合结束后,会去触发onInput
事件,即可解决中文输入法一开始输入就触发校验的问题。但
chromev53
以后,onInput
以后才触发compositionEnd
,所以要在compositionEnd
时,也调用一下在onInput
中的代码。
表单校验时,用什么事件最合适
请查看图1中的表单事件总结。
针对实时校验,推荐用 onInput
事件;
针对填写完成再校验,推荐用 onBlur
事件;
针对中文输入法的实时校验,推荐用onInput
和composition
事件的结合,记得要做兼容。