gpt4 book ai didi

javascript - 当正则表达式组不为 null 或为空时插入连字符

转载 作者:行者123 更新时间:2023-11-29 19:03:46 25 4
gpt4 key购买 nike

我有一个数字代码,长度从 6 到 11 位不等

每3个数字后用连字符分隔

可能的组合

123-456

123-456-78

123-456-7890

因此,我在这里尝试将用户输入的代码转换为这种格式,即使在中间输入空格和连字符时也是如此。

例如:

    123 456-7 -> 123-456-7

123456 789 -> 123-456-789

123456 -> 123-456

有效的用户输入格式是 3digits[空格或连字符]3digits[空格或连字符]0 到 5digits

我试过这样

code.replace(/^(\d{3})[- ]?(\d{3})[- ]?(\d{0,5})$/,'$1-$2-$3');

但是当只有 6 位数字时,数字末尾有一个连字符 (-),这是不需要的。

  123-456-

有人可以帮我解决这个问题吗?谢谢。

最佳答案

最简单的方法可能是用第二个 replace 来做到这一点:

code.replace(/^(\d{3})[- ]?(\d{3})[- ]?(\d{0,4})$/,'$1-$2-$3')
.replace(/-$/, '');

这是链接第二个替换函数,它表示“用空字符串替换字符串末尾的 -”。或者换句话说,“如果字符串的最后一个字符是 -,则将其删除。

我发现这种方法比尝试将此逻辑全部放入 replace 命令更直观,但这也是可能的:

code.replace(
/^(\d{3})[- ]?(\d{3})[- ]?(\d{0,4})$/,
'$1-$2' + ($3 == null ? '' : '-') + $3
)

我认为这段代码的作用乍一看不太明显,但最终结果是一样的。如果没有 $3 匹配(即您的字符串仅包含 6 位数字),则不要在替换中包括最后的 -

关于javascript - 当正则表达式组不为 null 或为空时插入连字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44563470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com