正则表达式检查数字字段没有/或具有所有相同的数字

时间:2016-04-18 21:02:05

标签: javascript jquery asp.net regex

我必须验证一个字段。该字段应为数字,不应包含所有相同的数字(如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位数

2 个答案:

答案 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()方法。