正则表达式3编号部分用短划线分隔

时间:2014-02-24 12:36:43

标签: javascript regex

我想在JavaScript中为字符串创建一个RegExp验证,它可以包含3个部分:

P1-P2-P3

遵守以下规则:

  • P1,P2和P3只能是数字
  • 每个部分可以是1-13位长
  • 整个字符串不能超过20个字符
  • P2和P3部分是可选的(意味着34已经是有效字符串,或34-6565566-233455-23232)。

目前我有这个,但我错过了整个字符串长度,我不知道如何定义可选部分:

/^.\d{1,13}-\d{1,13}-\d{1,13}$/

以下是一些有效的条目:5656,33434-2323-45,12-4345-12,1234567890123-123456,1234567890123-12-56

无效条目:34453454351234566787,1234567890123-1234567890123,2345-233-123-3434,34sd1322-23,31234as,...

6 个答案:

答案 0 :(得分:2)

您可以使用:

^(?=\d{1,13}(-\d{1,13}){0,2}$)[\d-]{1,20}$

在线演示:http://regex101.com/r/sM6wQ7

说明:

enter image description here

答案 1 :(得分:0)

试试这个:

 /(^\d{1,13}(-\d{1,13})?(-\d{1,13})?$){1,20}/

?表示0或1,因此这对可选部分很有用。

{1,20}在整个字符串的末尾检查它不会超过20。

答案 2 :(得分:0)

/^(?!.{21,})\d{1,13}(-\d{1,13}){0,2}$/

(?!.{21,})开头 - 负前瞻意思:不超过20个字符。

答案 3 :(得分:0)

(\d{1,13}-){0,2}(\d{1,13})

匹配两组数字,长度最多为13位,后跟短划线,然后是一组长度最多为13位的数字。这种方法是可扩展的,因为您只需要在第一个捕获组之后更改数字,以更改所需的数字部分数量。如果字符串的长度合适,我会建议您通过代码检查,然后再通过正则表达式进行验证。它会更快,更具可读性。

示例:http://regex101.com/r/wI7uX1

您也可以通过Javascript执行此操作,它可能会更快:http://jsfiddle.net/sauYY/

答案 4 :(得分:0)

总字符串长度检查必须分开;其余的可以用正则表达式完成:

var re = /^\d{1,13}(?:\-\d{1,13}){0,2}$/;

if (str.length <= 20 && str.match(re)) {
    // valid
}

答案 5 :(得分:0)

试试这个:

/^(?=.{0,20}$)\d{1,13}(-\d{1,13}){0,2}$/

描述:

^                  beginning of the input
(?=.{0,20}$)       followed by any char, 0 or 20 times, + end of the input
\d{1,13}           a digit, 1 or 13 times
(-\d{1,13}){0,2}   a dash + same as above, 0 or 2 times
$                  end of the input

有关正则表达式的更多信息:http://www.javascriptkit.com/javatutors/redev.shtml