我有一个长度为 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
有效的用户输入格式为 3 位数字[空格或连字符]3 位数字[空格或连字符]0 到 5 位数字
我尝试过这样的
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/