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

标签 javascript regex

我有一个长度为 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/

相关文章:

javascript - 销毁事件不会从 Backbone 模型传播到 Backbone 集合

javascript - Window.print 抛出程序停止错误

javascript - 优化 javascript 显示/隐藏单选表单选项

javascript - 正则表达式 |将单词与冒号匹配,但忽略类似时间的模式

java - preg_match() : Text range out of order on PHP Regex

javascript - 使用 HTML 创建登录页面

正则表达式:匹配,但如果在评论中则不匹配

精确字符串长度的Python正则表达式

java - 手机号码字段验证

c# - Windows 运行时从 WebView 中的 JavaScript 访问文件