首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我需要创建一个四位数的输入(所有数字都应该是不同的,第一个数字应该是1)

我需要创建一个四位数的输入(所有数字都应该是不同的,第一个数字应该是1)
EN

Stack Overflow用户
提问于 2017-01-06 01:56:16
回答 2查看 74关注 0票数 0

我想检查一下使用"pattern“属性,用户不能输入两个类似的数字,例如: 1232,1222,1229等。在谷歌搜索后,我发现了类似的东西:pattern="^1(?:([2-9])(?!\1))+$",但它不适用于1232 (例如),并且它不考虑您输入了多少数字。

EN

回答 2

Stack Overflow用户

发布于 2017-01-06 02:29:04

您可以使用以下内容:

代码语言:javascript
复制
^(?!.*(\d).*\1)1\d{3}$

它的工作原理是需要一个1,然后再加上3位数字。它使用负前视来验证数字在4个数字中的任何位置都不重复。

针对测试用例运行以下示例:

代码语言:javascript
复制
let regex = /^(?!.*(\d).*\1)1\d{3}$/;

function test(numberAsString) {
  console.log(numberAsString, regex.test(numberAsString));
}

test('1232'); // false, number repeated
test('1222'); // false, number repeated
test('1229'); // false, number repeated
test('1234'); // true
test('2345'); // false, 1 does not start
test('1789'); // true
test('12345'); // false, too many digits
test('123'); // false, too little digits

正则表达式的解释:

代码语言:javascript
复制
1\d{3}

表示它需要一个1,然后是3位数字的部分

代码语言:javascript
复制
(?!.*(\d).*\1)

是一个negative lookahead (请注意(?!)。它扫描整个输入(.*),直到找到一个被捕获(由()包围)的数字(\d),并扫描字符串的其余部分(.*),查找其自身的副本(\1),或者换句话说,第一个捕获是什么。简单地说,这里有一个1的例子,它在任何时候都不能跟1:(?!.*1.*1)。但是,由于您对任何数字(\d)使用了特殊字符,因此可以断言找到的任何数字都不会重复。

代码语言:javascript
复制
^

断言字符串的开头。

代码语言:javascript
复制
$

断言字符串的结尾。需要这些开始和结束断言,以便像asd1234这样的字符串不会通过验证。

票数 1
EN

Stack Overflow用户

发布于 2017-01-06 02:40:09

看看这个

代码语言:javascript
复制
// Magical function.
var checkDigits = function(num, maxLength) {
    let allDigits = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    try {
        if (num.length < 1 || num.length > maxLength) throw new Error("You need to enter exactly " + maxLength + " digits");
        for (let i = 0; i < num.length; i++) {
            if (allDigits[num[i]] === null) throw new Error("You repeated a digit in your sequence");
            allDigits[num[i]]  = null;
        }           
    } catch (e) {
        console.error(e);
        return false
    }
    return allDigits;
};

// Getting data from dom.
var num = document.getElementById("num").value;
// Trying to see the data in the console.
if (num[0] == 1) console.log(checkDigits(num.slice(1)));

这就是我能说的,我希望你能理解

编辑:哦,我错过了这一部分,抱歉。

干杯,Rj

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41491649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档