0
  • 正则表达式 1:检查 3 到 6 之间的数字。

    var myRegxp = /^([0-9]){3,6}$/;
    
  • 正则表达式 2:检查 3 到 6 之间的数字。

    var myRegxp = /^([0-9_]){3,6}$/;
    
  • 正则表达式 3:检查 3 到 6 之间的数字以及dash.

    var myRegxp = /^([0-9_-]){3,6}$/;
    

问题:

  1. 为什么所有这些对于 3 和 6 之间的数字匹配都非常有效?
  2. _第二个和第三个表达式中的(下划线)是什么意思?
4

2 回答 2

5

这些中的每一个都检查 3 到 6 个字符的序列。

第一个只允许 3 位数字。

第二个允许 3 个字符,但除了数字之外还包括下划线。

第三个允许 3 个字符,但除了数字之外还包括下划线和破折号。

这些是否“有效”取决于您要完成的工作。破折号对于允许负数很有用,尽管更严格的正则表达式会要求破折号位于第一个位置,并且仍然允许 3 到 6 个额外的数字。

在回答您关于下划线的问题时,它只是第三个正则表达式中另一个允许的字符。这是一个完全合法的正则表达式。


如果你剖析第三个正则表达式,你会得到:

^表示您要匹配的字符串的开头

()意味着在结果中分别捕获括号之间的内容。它不会影响匹配的内容,但会影响匹配结果的返回方式。

[]表示一个字符集,它可以匹配这些括号中的任何内容。

[0-9]表示一个字符范围,其中 0 到 9 之间的任何字符都将构成匹配。

[0-9_-]表示与上面相同的范围,但还包括下划线字符和连字符。

{3,6}表示您要匹配前一个正则表达式元素的 3-6 次出现。

$表示字符串的结尾


因此,在第三个正则表达式中,您要查找字符串的开头,然后是 3-6 个字符,可以是数字、下划线或连字符,然后是字符串的结尾。


例如:

"444" - matches all three
"-44" - matches the second or third
"_-4" - matches the third
"4"   - matches none

如果您想要一个允许 3-6 位数字并且可以是正数或负数的正则表达式,那么您将使用如下内容:

/^[+\-]?\d{3,6}$/

这允许一个可选的前导连字符或加号,后跟 3-6 位数字。

于 2013-05-05T22:14:15.327 回答
4

[0-9]意思是“从0to范围内的任何东西9”,或者换句话说,一个数字(也可以用 表示\d)。括号表示分组,但在这里是不必要的。意思是“前面的{3,6}东西必须出现三到六次”。^and$表示正则表达式必须匹配整个字符串。

中的下划线[]表示它与数字一起也是有效字符。

它们都是有效的正则表达式,但做不同的事情:

  • 第一个只允许三到六位数。
  • 第二个只允许三到六位数字或下划线。
  • 第三个只允许使用三到六位数字、下划线或连字符。

您要使用哪一个取决于您认为有效的数据。例如,如果连字符无效,您就不想使用第三个,因为它接受连字符。如果你想禁止下划线,那么你最好使用第一个,因为所有其他的都允许下划线。您甚至可以创建一个正则表达式来允许数字和破折号,但不是很简单的下划线:/^[\d-]{3,6}$/

于 2013-05-05T22:15:27.150 回答