正则表达式限制星号(*)和数字的长度

时间:2016-02-23 12:11:56

标签: javascript regex

我正在尝试正则表达式,我需要限制星数(*)和数字值我这样做以限制星数* /([*]*\*[^*]*){9}/星星(*)现在将限制为9我需要限制数字也高达9,请帮助我。

1 个答案:

答案 0 :(得分:1)

您可以使用

/^(?=(?:[^*]*[*]){9})(?=(?:\D*\d){9})/

正则表达式分解:

  • ^ - 匹配字符串的开头
  • (?=(?:[^*]*[*]){9}) - 要求字符串在任意位置至少包含9个*符号
  • (?=(?:\D*\d){9}) - 要求字符串在任何位置至少有9位数字

请参阅regex demo

正则表达式的基本原则:

  • 在开始时锚定的Lookarounds(^)检查他们的子模式只存在一次
  • 它们不消耗字符,因此每个前瞻都会从字符串的开头检查字符串
  • 使用相反的子模式:[^*]来检查任何字符,但*\D检查彼此之间的非数字字符(即(?:[^*]*[*]){9}匹配除*以外的一个零个或多个字符的9个序列,后跟一个*)。

要仅匹配包含最多 9个数字和星号的字符串,您需要扩展前瞻:

/^(?=(?:[^*]*[*]){1,9}[^*]*$)(?=(?:\D*\d){1,9}\D*$)/

应在每个前瞻的末尾添加否定的字符类,并且应使用$以确保我们检查整个字符串到最后。 {1,9}将匹配限制量词所应用的1到9个子模式。

请参阅this regex demo

var ss = [ "12345****6789*****", "1234534****6789*****", "12345*********6789*****", "****12", "****6766", "773***666**"]; // Test strings
var rx = /^(?=(?:[^*]*[*]){1,9}[^*]*$)(?=(?:\D*\d){1,9}\D*$)/;  // The regex 
for (var s = 0; s < ss.length; s++) {                       // Demo
  document.body.innerHTML += "Testing \"<i>" + ss[s] + "</i>\"... ";
  document.body.innerHTML += "Matched: <b>" + rx.test(ss[s]) + "</b><br/>";
}