Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.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 使用正则表达式限制字段中输入的帐户ID_Javascript_Angularjs_Regex - Fatal编程技术网

Javascript 使用正则表达式限制字段中输入的帐户ID

Javascript 使用正则表达式限制字段中输入的帐户ID,javascript,angularjs,regex,Javascript,Angularjs,Regex,我在网站上有一个表单,使用Angular 1.6,其中一个字段允许用户输入应该执行操作的帐户ID。(实际上,这些表单中有几个都由同一个控制器供电。) 要求用户用任何非字母数字字符分隔ID 但是,在这些表单的某些实例中,我需要限制可以指定的ID数量。(所有ID都符合模式[a-z0-9])我已经通过以下正则表达式模式和ng模式接近我所需要的。regexp存储在app.js中的变量中,该变量在HTML中引用: new RegExp(`^(?:(?=([a-z0-9]+))\\1[^a-zA-Z0-9]

我在网站上有一个表单,使用Angular 1.6,其中一个字段允许用户输入应该执行操作的帐户ID。(实际上,这些表单中有几个都由同一个控制器供电。)

要求用户用任何非字母数字字符分隔ID

但是,在这些表单的某些实例中,我需要限制可以指定的ID数量。(所有ID都符合模式
[a-z0-9]
)我已经通过以下正则表达式模式和ng模式接近我所需要的。regexp存储在app.js中的变量中,该变量在HTML中引用:

new RegExp(`^(?:(?=([a-z0-9]+))\\1[^a-zA-Z0-9]*){1,${maxSites}}$`);
不幸的是,这还与帐户ID后面的逗号、空格等相匹配。例如,我的正则表达式与
foobar、
(“foobar”后跟逗号和空格)相匹配,但它不应该匹配

下面的表格显示了基于
maxSites
,我希望工作正则表达式能够匹配的内容:

Input | Max | Max 2 | Max 3 foobar | yes | yes | yes foobar, | no | no | no foobar, | no | no | no foobar,bizbaz | no | yes | yes foobar, bizbaz1 | no | yes | yes foobar bizbaz1 | no | yes | yes foobar, bizbaz1, | no | no | no foobar, bizbaz1, binbong2 | no | no | yes 输入|最大值|最大值2 |最大值3 foobar |是|是|是 foobar,|不|不|不 foobar,|不|不|不 foobar,bizbaz |不|是|是 foobar,bizbaz1 |不|是|是 foobar bizbaz1 |不|是|是 foobar,bizbaz1,|不|不|不 foobar、bizbaz1、binbong2 |不|不|是
有没有办法用RegExp做到这一点?

下面是我的想法。 ^([a-z0-9]+){1}(,[a-z0-9]+){0,(MAX-1)}
此站点允许您测试要测试的字符串,并可以查看其是否匹配。第一个组不能有逗号,只能有一个字母数字字符串。第二组首先包含逗号,因此不能有尾随逗号,并且可以重复0到MAX-1。我希望这能有所帮助。

以下是我的想法。 ^([a-z0-9]+){1}(,[a-z0-9]+){0,(MAX-1)}
此站点允许您测试要测试的字符串,并可以查看其是否匹配。第一个组不能有逗号,只能有一个字母数字字符串。第二组首先包含逗号,因此不能有尾随逗号,并且可以重复0到MAX-1。我希望这会有所帮助。

除非您有其他更令人信服的理由使用正则表达式,否则我更喜欢使用自定义验证函数来验证。看起来您确实在尝试拆分一个字符串,然后验证(非空)元素的数量是否小于或等于一个数字。这是一个使用正则表达式的好时机,也是一个使用正则表达式的坏时机。下面是一个验证字符串形式的简单函数:

function isValidAction(str, max) {
    if (!str || !max)
        return false;

    //split the string by non-alphanumeric
    var actions = str.split(/[^a-zA-Z\d]/);

    //validate length
    var valid = actions.length <= max;
    //validate every element has non-empty content
    valid = valid && actions.every(function(a) {
        return a.length > 0;
    });
    return valid;
}
函数是有效的(str,max){
如果(!str | |!max)
返回false;
//按非字母数字拆分字符串
var actions=str.split(/[^a-zA-Z\d]/);
//验证长度
var valid=actions.length 0;
});
返回有效;
}
然后,用
ng change
手动将其连接起来,并使用类似于手动验证自定义逻辑的东西


除非您有其他更令人信服的理由使用正则表达式,否则我更喜欢使用自定义验证函数来验证。看起来您确实在尝试拆分一个字符串,然后验证(非空)元素的数量是否小于或等于一个数字。这是一个使用正则表达式的好时机,也是一个使用正则表达式的坏时机。下面是一个验证字符串形式的简单函数:

function isValidAction(str, max) {
    if (!str || !max)
        return false;

    //split the string by non-alphanumeric
    var actions = str.split(/[^a-zA-Z\d]/);

    //validate length
    var valid = actions.length <= max;
    //validate every element has non-empty content
    valid = valid && actions.every(function(a) {
        return a.length > 0;
    });
    return valid;
}
函数是有效的(str,max){
如果(!str | |!max)
返回false;
//按非字母数字拆分字符串
var actions=str.split(/[^a-zA-Z\d]/);
//验证长度
var valid=actions.length 0;
});
返回有效;
}
然后,用
ng change
手动将其连接起来,并使用类似于手动验证自定义逻辑的东西


这几乎正是我想要的。我对您提供的RegExp做了一点小小的更改,只是因为我不希望逗号成为用户可以使用的唯一分隔符。最后一个RegExp看起来是这样的:
^([a-z0-9]+){1}([\W]+[a-z0-9]+){0,4}$
这几乎就是我想要的。我对您提供的RegExp做了一点小小的更改,只是因为我不希望逗号成为用户可以使用的唯一分隔符。最后一个RegExp是这样的:
^([a-z0-9]+){1}([\W]+[a-z0-9]+){0,4}$
,对于任何想找到类似问题答案的人来说。。。我真的觉得这将是解决这个问题的最佳做法。它非常优雅,遵循Angular的所有最佳实践。我没有将其标记为可接受答案的唯一原因是,提出的问题是“有没有一种方法可以使用RegExp实现这一点”,而这个答案并没有直接说明这一点。(然而,它确实提供了一个更好的选择。)不用担心。稍后,当您获得向上投票帖子的特权时,您可以注意到,此答案有助于向上投票(并接受另一个答案)。对于任何想要回答类似问题的人。。。我真的觉得这将是解决这个问题的最佳做法。它非常优雅,遵循Angular的所有最佳实践。我没有将其标记为可接受答案的唯一原因是,提出的问题是“有没有一种方法可以使用RegExp实现这一点”,而这个答案并没有直接说明这一点。(然而,它确实提供了一个更好的选择。)不用担心。稍后,当您获得向上投票帖子的特权时,您可以注意到这样一个事实,即此答案有助于向上投票(并接受另一个答案)。