Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我需要创建一个四位数的输入(所有数字都应该不同,第一个数字应该是1)_Javascript_Html_Regex_Input - Fatal编程技术网

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

Javascript 我需要创建一个四位数的输入(所有数字都应该不同,第一个数字应该是1),javascript,html,regex,input,Javascript,Html,Regex,Input,我想使用pattern属性检查用户是否不能输入两个类似的数字,如:1232、1222、1229等。 在谷歌搜索之后,我发现了这样的东西:模式=^1?:[2-9]\1 + $,但它不适用于1232,例如它不考虑你输入多少个数字。 你可以使用以下: ^(?!.*(\d).*\1)1\d{3}$ 它需要一个1,然后是3个以上的数字。它使用负前瞻来验证数字是否在4个数字中的任何位置重复 针对测试用例运行以下示例: 让正则表达式=/^*\d、 *\11\d{3}$/; 函数TestNumberStri

我想使用pattern属性检查用户是否不能输入两个类似的数字,如:1232、1222、1229等。
在谷歌搜索之后,我发现了这样的东西:模式=^1?:[2-9]\1 + $,但它不适用于1232,例如它不考虑你输入多少个数字。

你可以使用以下:

^(?!.*(\d).*\1)1\d{3}$
它需要一个1,然后是3个以上的数字。它使用负前瞻来验证数字是否在4个数字中的任何位置重复

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

让正则表达式=/^*\d、 *\11\d{3}$/; 函数TestNumberString{ console.lognumberAsString,regex.testnumberAsString; } 测试'1232';//错,数字重复 测试'1222';//错,数字重复 测试'1229';//错,数字重复 测试'1234';//符合事实的 测试'2345';//false,1不启动 测试'1789';//符合事实的 测试'12345';//false,数字太多 测试'123';//错误,数字太少请检查此项

// 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

我不懂这个*\d、 *\1,所以上面的解释没有多大用处。@user5676973,我已经包含了一个到负面表情的基本知识的链接。我还更新了一些解释来解释这个消极前瞻是如何工作的。它工作得很好,非常感谢你的详细解释。我不确定这是要实现什么。每次我尝试运行这个函数excheckdigits1234,4时,返回值总是一个数字0-9的数组。如果它有效或无效,我希望它返回true或false。好吧,这不是我想要的。首先,我还想写一个函数,但这里正则表达式更实用。我将输入包含在表单中,当单击submit时,它运行我称之为onclick的函数,但它执行的函数会将我重定向到下一页,但我不需要,如果输入无效,则重点不在返回值上,如果我输入的数字相同,则会抛出错误,但是在catch中,您可能会返回false而不是null,这将满足您的期望。返回真值有什么意义?返回该数组已生成真实结果。除0外,false为false,其他所有为true,对吗?它还返回已使用和未使用的数字可能对以后有用吗?yo Viorel Casapu和KevBot你认为我应该删除我的答案吗?顺便问一下,KevBot,为什么你可以在同一根绳子上使用两种不同的火柴。你给了什么不找的?!然后是1\d{3}?你是怎么做到的?在整个负回望中使用括号和它有什么关系吗?