自定义验证 - 澄清

时间:2013-12-09 05:20:11

标签: javascript

这是具有多个场景的字符串验证。 Case1和case 6是有效的场景,其他情况都是无效的情况。我的验证码不适用于case2和case5以及case6。

jsfiddle

验证码:

function testCases(str){
 return (str.match(new RegExp("\\([^,]+\\)","g")).length == str.split(",").length)
}

实际验证输出:

stack(2),flow(2),over(4),temp(7): true 
stack(2),flow(3),over(4),temp(k): true 
stack(2),flow(2),over(4),temp(0: false 
stack(2),flow(2),over(,temp): false 
stack(2),flow(2),over(4)temp(8): true 
stack(1),flow(7),over,temp: false
stack(1),flow(),over,temp: false

我的期望输出:

stack(2),flow(2),over(4),temp(7): true 
stack(2),flow(3),over(4),temp(k): false
stack(2),flow(2),over(4),temp(0: false 
stack(2),flow(2),over(,temp): false 
stack(2),flow(2),over(4)temp(8): false
stack(1),flow(7),over,temp: true
stack(1),flow(),over,temp: false

1 个答案:

答案 0 :(得分:1)

您的验证码只是检查以确保您拥有的paren组数量与逗号分隔的术语数量相匹配,因此它不会执行您想要的操作。您应该单独检查条款:

function validateChunk(s)
{
    return !!s.match(/^[a-z]+(?:\(\d+\))?$/);
}

function filterValid(v)
{
    return !v;
}

function testCases(str)
{
    var chunks = str.split(",");
    var validated = chunks.map(validateChunk);
    return (0 === validated.filter(filterValid).length);

}

http://jsfiddle.net/c8t26/7/