为什么String(value).replace(/[^0-9.-]/g, '')可过滤非法数字字符?
正则表达式拆解与代码逻辑
这段代码的核心是正则/[^0-9.-]/g,我们逐部分解释规则:
- 最外层的
/ /是JavaScript中正则表达式的字面量声明符号 []代表字符组,匹配括号内包含的任意单个字符- 字符组开头的
^是取反标识,代表匹配不包含在当前字符组内的字符 0-9是范围匹配规则,覆盖0到9的所有阿拉伯数字.和-是字面量匹配:这里-放在字符组末尾,不会被识别为范围连接符,仅匹配负号本身;.在字符组内不需要转义,仅匹配小数点本身- 末尾的
g是全局匹配修饰符,代表匹配所有符合规则的字符,而非仅匹配第一个命中项
replace(/[^0-9.-]/g, '')的作用就是把所有命中正则的字符替换为空字符串,也就是直接删除。
实际会被替换的内容
所有不是阿拉伯数字、不是小数点、不是负号的字符都会被删除,仅保留这三类字符。
你给出的示例运行逻辑就是:
原字符串"1.absd"里,a、b、s、d都不属于允许保留的三类字符,全部被删除,最后剩下'1.',和示例输出一致。
补充说明
这段代码仅做非法字符过滤,返回的结果不一定是完全合法的数字,比如输入"1.2.3"会返回"1.2.3"、输入"-12-3"会返回"-12-3",这类多小数点、多负号的结果还需要后续额外校验转换才能得到合法数字。
内容的提问来源于stack exchange,提问作者Mark Vetin
相关产品推荐
相关产品推荐

