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

Regular Expression to Check numeric field doesn't have /or have all same digits

本文关键字:数字 正则表达式 检查 字段      更新时间:2023-09-26

我必须验证一个字段。该字段应为数字,不应包含所有相同的数字(如555555、111111(。我需要一个正则表达式来检查这一点。我需要知道如何检查它是否包含所有相同的数字。

尝试了一些解决方案,例如以下解决方案,但没有奏效

这三个不起作用

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}'); 

这个工作部分是因为在这里它固定到特定数量的数字,例如{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 个唯一数字的全数字字符串的正则表达式是

/^('d)(?:'1+)?$/

请参阅正则表达式演示。

解释

  • ^ - 字符串的开头
  • ('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";

您可以使用

此模式(使用 matches 方法,该方法将模式隐式锚定在两侧(:

('d)'1*+'d+

(不要忘记转义字符串中的反斜杠(

主要思想是使用所有格量词(*+(来禁止反向引用量词的回溯。由于此量词不能用于回溯,因此以下数字只能不同。

如果要允许个位数字符串,可以将第二部分设置为可选:

('d)(?:'1*+'d+)?

或者您可以添加替代:

('d)'1*+'d+|'d

如果你想检查字符串的长度,(你显然可以用同样的正则表达式来做(使用 string.length() 方法。