繁体   English   中英

JavaScript 中的正则表达式允许最多 10 位数字,数字之间只有一个下划线,并防止在前 5 位数字后输入下划线

[英]Regex in JavaScript which allow maximum 10 digits, only one underscore in between the digits and prevent entering underscore after the first 5 digits

我正在寻找可用于屏蔽输入字段值的正则表达式。 条件如下

  1. 只允许数字和下划线

  2. 只允许一个下划线

  3. 最多允许 10 位数字

  4. 防止在前 6 位数字后输入下划线。

  5. 在前 5 位数字之后(如果没有添加下划线)应该会自动显示一个下划线

  6. 下划线后的数字不应超过 5 位。

     /^\\d*\\_?(?:\\d{1,5})?$/

上面的表达式可以解决条件 1 和 2。

几个例子:

12345_67890 - Valid
123456_7890 - Not valid
12345_678901 - Not valid
1234A -Not valid
12345 - Valid
12_45_56 - Not Valid
12_45 - Valid
_12 - Valid
12_ - Valid
-678901 - Not valid

您可以使用此正则表达式:

^(?=(?:_?\d_?){1,10}$)\d{0,5}_?\d{0,5}$

正则表达式演示

正则表达式详情:

  • ^ : 开始
  • (?=(?:_?\\d_?){1,10}$) :正向预测允许 1 到 10 位数字
  • \\d{0,5} : 匹配 0 到 5 位数字
  • _?\\d{0,5} : 匹配可选的下划线后跟 0 到 5 位数字
  • $ : 结束

  1. 在前 5 位数字之后(如果没有添加下划线)应该会自动显示一个下划线

基于编辑的问题。 如果您想在 5 位数字后插入一个_如果它丢失,则使用上面的正则表达式进行match然后使用下一个进行replace

var repl = str.replace(/^(\d{5})(\d*)$/, '$1_$2')

试试这个。

^(?<=\d{0,5})\d{0,5}_?\d{0,5}(?=\d{0,5})$

这是这个正则表达式的工作原理。

  1. \\d{0,5}_?\\d{0,5}

    这符合所需的条件。 总共 10 位数字,其中 5 位后不能出现_ 所以我们走了。 我们检查在_之前和之后是否最多出现 5 个数字。

  2. (?<=\\d{0,5})

    正前瞻算子。 检查_之前是否最多有 5 个数字或至少没有数字。

  3. (?=\\d{0,5})

    这是正向后视运算符。 这会检查_后面至少没有或最多 5 位数字。

  4. ^ ... $

    这匹配从行首到行尾的整个字符串。

要了解有关环视运算符如何在正则表达式中工作的更多信息,请单击此处
您可以在此处查看工作正则表达式。

笔记:
关于你的问题的第 5 点,没有单一的方法可以做你想做的事。 例如,如果您有一个输入框,并且您正在onChange事件上动态检查输入,并希望在前 5 个输入数字后插入_ ,则取决于您使用的框架(React/Angular/Vue),可以是实现这一目标的不同方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM