我正在尝试正则表达式,我需要限制星数(*)和数字值我这样做以限制星数* /([*]*\*[^*]*){9}/
星星(*)现在将限制为9我需要限制数字也高达9,请帮助我。
答案 0 :(得分:1)
您可以使用
/^(?=(?:[^*]*[*]){9})(?=(?:\D*\d){9})/
正则表达式分解:
^
- 匹配字符串的开头(?=(?:[^*]*[*]){9})
- 要求字符串在任意位置至少包含9个*
符号(?=(?:\D*\d){9})
- 要求字符串在任何位置至少有9位数字请参阅regex demo
正则表达式的基本原则:
^
)检查他们的子模式只存在一次[^*]
来检查任何字符,但*
和\D
检查彼此之间的非数字字符(即(?:[^*]*[*]){9}
匹配除*
以外的一个零个或多个字符的9个序列,后跟一个*
)。要仅匹配包含最多 9个数字和星号的字符串,您需要扩展前瞻:
/^(?=(?:[^*]*[*]){1,9}[^*]*$)(?=(?:\D*\d){1,9}\D*$)/
应在每个前瞻的末尾添加否定的字符类,并且应使用$
以确保我们检查整个字符串到最后。 {1,9}
将匹配限制量词所应用的1到9个子模式。
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/>";
}