React输入掩码处理:将(###) ###-####转为纯数字存入数据库
解决React中电话掩码转纯数字的问题
嘿,我完全懂你遇到的这个麻烦——用掩码格式化后的电话号码带了括号、空格和横杠,没法直接存入数据库,之前的正则只去掉了左括号,确实让人头疼!
其实你需要的是移除所有非数字的字符,最简单有效的方式就是用匹配非数字的正则加上全局替换:
const number = value.replace(/\D/g, "");
给你拆解下这个正则:
\D:专门匹配任何非数字的字符,不管是掩码里的括号、空格还是横杠,全能覆盖到g:全局匹配标志,确保把字符串里所有符合条件的非数字字符都替换掉,而不是只处理第一个
举个实际例子,要是你的输入是(123) 456-7890,运行上面的代码后会直接得到1234567890,正好是10位纯数字,完美适配数据库的存储要求。
为啥你之前的正则没起作用?
你写的/\([\(\)]\)/其实是在匹配「左括号 + 左/右括号 + 右括号」这种非常局限的组合,既没覆盖到空格和横杠,也没法处理完整的掩码格式,自然只能去掉个左括号啦。
额外加个小提醒:
如果你想确保处理后的结果一定是合规的10位数字,可以加个简单校验:
const cleanedNumber = value.replace(/\D/g, ""); if (cleanedNumber.length === 10) { // 符合要求,放心存入数据库 } else { // 提示用户输入有效的10位电话号码 }
内容的提问来源于stack exchange,提问作者Dan Orlovsky
相关产品推荐
相关产品推荐

