jquery提取字符串中的数字或非数字

发布于:2024-04-16 ⋅ 阅读:(146) ⋅ 点赞:(0)

由于与第三方接洽,发现,三方数据中手机号mobile的值非常不规范,其中包括:手机号前后有空格、手机号中间有空格(130 2773 4666)、手机号中间存在特殊字符(130-2773-4666)等等;
数据产生的原因不再追问,问题是,我们需要在这毫无规则的字符串中提取出手机号,所以有了下述的提取数字的函数

提取字符串中的数字(不完全版)

module.exports = {
  onlyNumber(str) {
    return str.replace(/[^0-9]/gi, '');
  }
};

[^0-9]/ig是“非数字”的正则表达式类,在onlyNumber函数中,将删除字符串中任何位置的非数字字符;

看似完美,但是有一个小问题,当onlyNumber入参为null、undefined或无入参,函数就会报错

TypeError: Cannot read property 'replace' of undefined

所以,在函数内部增加了一个判断,如果是字符串,则进行转化,如果不是字符串,则直接返回原值;

提取字符串中的数字(完全版)

module.exports = {
  onlyNumber(str) {
    return str && str.replace(/[^0-9]/gi, '');
  }
};

输出:

module.exports.onlyNumber(); //undefined
module.exports.onlyNumber(null); //null
module.exports.onlyNumber(undefined);//undefined
module.exports.onlyNumber('');//
module.exports.onlyNumber('12d dd3-3*2 1-');//123321

提取字符串中非数字的字符

module.exports = {
  onlyString(str) {
    return str && str.replace(/\d/g, '');
  }
};

\d是“数字”的正则表达式类,在onlyString函数中,将删除字符串中任何位置的数字字符;

题外话

如果你不知道&&是怎么回事,看这里:https://www.yuque.com/morange/morange/ra8vtf
如果你不知道正则,看这里:https://www.yuque.com/morange/morange/tw78ov


网站公告

今日签到

点亮在社区的每一天
去签到