一道前端开发面试题目,如下图:
参考代码如下图:
你说这些sda
用 input pattern 一行就搞定了😂
Csineneo 我想请你喝咖啡
Csineneo
<input pattern="regexp"> 只匹配而已,还需要后端进行处理,这个方案不合适的哦。比如:
pattern = "/0?1[3|4|5|7|8][0-9]\d{8}$/"
只要是数字都可以匹配到的啊,不符合要求的,比方说; 输入 1,可以匹配; 输入 13437210068,也可以匹配; 还有其他思路吗?
DocTam https://awk.tw/test/20180616/
Csineneo 受教了。🙏 虽然功能实现了,但题目似乎不仅仅考察功能性的问题啊。
Csineneo 经测试,当 <input type="text" /> 无论是我的 pattern="/0?1[3|4|5|7|8][0-9]\d{8}$/" 还是您的 pattern="(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}" 都可以成功完成校验,但是当 <input type="number" /> 就会失效,出现我上面提及的问题。
DocTam pattern 不支持 number 类型
Csineneo 确实是这样,不支持的类型,如: pattern 属性适用于以下 <input> 类型:text, search, url, telephone, email 以及 password 。 而题目也明确提到 text 以及 number 类型,应该是考虑到这种情况的。
DocTam 我觉得你想多了,这题目说不定是陈年老题,那时候还没有input pattern。还有一种可能是出题人就没想到用input pattern解。实际上这题目根本就是需求不明确,+86这种带区号的要不要判断,国外的手机号要不要判断,有的人喜欢在手机号码当中用空格和-分隔要不要判断,还有电脑操作不熟练的人输入法不小心设置了全角要不要判断,我估计出题人根本都没想过。
正则表达式?
js代码10行算啥,一行就行,多加几个分号不得了…
胸罩妹妹说的有道理… +86写成select选单,两个数组替换全角数字,一个正则去掉非数字字符,取后边11位验证有效性…