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

发布于 2022-09-12 23:37:12 字数 343 浏览 22 评论 0

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

预想是用正则匹配来做

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

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

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

请教一下 应该怎么写?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夜吻♂芭芘 2022-09-19 23:37:12
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 
奢望 2022-09-19 23:37:12
"-1-23-za.123.-1231".replace(/[^.-\d]/g, '').replace(/(?!^)-/g, '').replace(/(\.)(?!\.[^.]+$)/, '') // "-123123.1231"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文