JS 正则匹配替换掉指定字符 例如 多余的 - 以及多余的点

要求
1: - (负号) 必须在最前面 否则删除
2: . (点) 只能有一个 可以在最后
3: 只允许输入 - 和 . 以及数字 其他的全部清空

预想是用正则匹配来做

"-1-23-za.123.-1231".replace(/[^0-9^.^-]+/g, "");

利用上面代码 得到了 只允许输入 - 和 . 以及数字 其他的全部清空
"-1-23-.123.-1231"

但是要如何写才能 替换删除掉 第一个点之后的所有点
以及如果 - (负号) 不在最前面 即删除

请教一下 应该怎么写?

阅读 3.2k
2 个回答
const temp = "-1-23-za.123.-1231";


const normalizeNumberString = (str) => {
  let skipNegative = false;
  let skipDot = false;

  let ans = "";
  for (let i = 0; i < str.length; ++i) {
    if (str[i] <= "9" && str[i] >= "0") {
      ans += str[i];
    } else if (!skipNegative && str[i] === "-") {
      if (ans.length) {
        skipNegative = true;
        continue;
      }
      ans += "-";
      skipNegative = true;
    } else if (!skipDot && str[i] === ".") {
      ans += ".";
      skipDot = true;
    }
  }

  return ans;
};

console.log(normalizeNumberString(temp)); //-123.1231231 
"-1-23-za.123.-1231".replace(/[^.-\d]/g, '').replace(/(?!^)-/g, '').replace(/(\.)(?!\.[^.]+$)/, '') // "-123123.1231"
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题