JavaScrip实现Strip()功能

背景

之前用JS做了一个输入校验的功能,要求输入的必须是一个合法的email地址,结果在自己测试的时候发现输入不通过。检查发现,现在手机输入法(搜狗)联想输入的时候,默认会在输入的词语后面加上一个空格,所以导致校验的正则不通过。

思路

Email校验的正则如下:

1
2
let reg = new RegExp("^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$")
reg.test(email)

根据上述正则,是不允许字符串开头结尾有空格之类的多余字符的。那么解决这个问题就有两个方案:

  • 修改正则,允许开头、结尾有空格等符号
  • 对输入做处理,删除开头、结尾的空格等符号

这里我选了第二种,因为一直有在写python,其中有一个strip()函数,可以自动的删除字符串开头结尾的空格等多余符号的,所以理所当然认为javascript也有,结果发现竟然是没有的。

那么需要自己写一个了。

对字符串的处理,最简单粗暴的也就是正则了。

  • 在正则中\s可以匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。注意 Unicode 正则表达式会匹配全角空格符。

    http://www.runoob.com/regexp/regexp-syntax.html

  • 先找从字符串开头起的\s : ^\s+

  • 再找字符串结尾的\s: \s+$
  • 将找到的字符串替换为空''

结论

根据上面的思路,表达式也就出来了:

1
let email = email.replace(/^\s+|\s$/g, '')

其中/g是用于全局替换的,如果不加/g,那么当开头和结尾都有空格等符号时,仅会替换开头部分。

http://www.runoob.com/jsref/jsref-regexp-g.html