我必须验证一个字段。该字段应为数字,不应包含所有相同的数字(如555555,11111)。我需要一个正则表达式来检查这个。我需要知道如何检查它是否包含所有相同的数字。
尝试过几个像以下一样的解决方案但没有工作
这三个人没有工作
var reg_exp = new RegExp('/^([0-9a-z])\1+$/gm');
var reg_exp = new RegExp('/^(\d)\1*$/');
var reg_exp = new RegExp('([0-9])\\1{5}');
这个部分工作在bcoz这里修复了特定的数字位数,例如{6}在示例中为特定数字,但我需要一个解决方案,以便我可以将其应用于任意数量的数字
<!DOCTYPE html>
<html>
<body>
<button onclick="myFunction()">Try it</button>
<script>
function myFunction() {
var str = "111111112";
var reg_exp = new RegExp('([0-9]){6}');
alert(reg_exp.test(str));
}
</script>
</body>
</html>
基于http://stackoverflow.com/users/3832970/wiktor-stribi%C5%BCew尝试了这个,它适用于长度超过2的字符串
function myFunction() {
var str = "222";
var reg_exp = /^(\d)\1+$/; // new RegExp('([0-9]){6}');
alert(reg_exp.test(str));
}
返回true
和
function myFunction() {
var str = "221";
var reg_exp = /^(\d)\1+$/; // new RegExp('([0-9]){6}');
alert(reg_exp.test(str));
}
返回false
但问题是
function myFunction() {
var str = "22";
var reg_exp = /^(\d)\1+$/; // new RegExp('([0-9]){6}');
alert(reg_exp.test(str));
}
或
function myFunction() {
var str = "11";
var reg_exp = /^(\d)\1+$/; // new RegExp('([0-9]){6}');
alert(reg_exp.test(str));
}
返回false
我需要一个可以用于一位数字的正则表达式。并且var str = "1";
或var str = "22";
应该返回true
。基本上这些数字应该至少有两个unique
位数
答案 0 :(得分:3)
将匹配没有2个唯一数字的全数字字符串的正则表达式
/^(\d)(?:\1+)?$/
请参阅regex demo。
<强>解释强>:
^
- 字符串开头(\d)
- 第1组捕获单个数字(字符串中的第一个数字)(?:\1+)?
- 一个可选的(因为?
匹配一个或零个匹配)非捕获组匹配与第1组捕获的相同数字$
- 字符串结束。在JS中:
document.body.innerHTML = "22: " + /^(\d)(?:\1+)?$/.test("22") + " as there are no unique digits, 2-digit string";
document.body.innerHTML += "<br/>12: " + /^(\d)(?:\1+)?$/.test("12") + " as there are 2 unique digits";
document.body.innerHTML += "<br/>1: " + /^(\d)(?:\1+)?$/.test("1") + " as there is just 1 digit, no 2 unique digits";
document.body.innerHTML += "<br/>-------- OR, with negation ----------";//or
document.body.innerHTML += "<br/>22: " + !/^(\d)(?:\1+)?$/.test("22") + " as there are no unique digits, 2-digit string";
document.body.innerHTML += "<br/>12: " + !/^(\d)(?:\1+)?$/.test("12") + " as there are 2 unique digits";
document.body.innerHTML += "<br/>1: " + !/^(\d)(?:\1+)?$/.test("1") + " as there is just 1 digit, no 2 unique digits";
答案 1 :(得分:2)
您可以使用此模式(使用matches
方法隐式固定两侧的模式):
(\d)\1*+\d+
(别忘了逃避字符串中的反斜杠)
主要思想是使用占有量词(*+
)禁止回溯参考量词。由于此量词不能用于回溯,因此以下数字只能是不同的。
如果您想允许单个数字字符串,您可以将第二部分设为可选:
(\d)(?:\1*+\d+)?
或者您可以添加更改:
(\d)\1*+\d+|\d
如果要检查字符串的长度,(显然可以使用相同的正则表达式执行)使用string.length()
方法。