duuliy

当input输入看不见的符号时

2023-9-22

背景

当你的用户在微信复制了一串url到你们家input框的时候,1比1手输验证通过,就是复制粘贴不行,输入法也没问题…..

原因

经过排查你发现用户是复制了一些看不见的符号(Unicode \u200b)…
https://c.runoob.com/front-end/3602/ (测试)

解决

你无法确定哪些Unicode是不可打印的,无法正向过滤,只知道ASCII(128)是最常见的,但是ASCII<Unicode < utf-8, 那么只能结合需求缩小范围…

eg:

    String.fromCharCode(8000)  //'ὀ'
    escape('ὀ')  //'%u1F40' '\u1F40'
    'ὀ'.charCodeAt()  //8000
    unescape('\u1F40') //ὀ

那么正向正则为:

    /[\u1F40-\uFFFF]/