javascript regex verfiy list以逗号分隔

时间:2016-03-08 09:33:41

标签: javascript regex

我需要准备正则表达式,它必须验证用逗号分隔的列表 要求是

  1. 检查列表是否以逗号分隔
  2. 必须没有逗号逗号/逗号
  3. ,,是不允许的;在逗号之间必须有单词
  4. 必须至少有一个逗号
  5. JS: https://jsfiddle.net/bababalcksheep/yyw29bj8/4/

    //check if list is separated by commas
    //There must be no trailing comma/commas
    // ,, is not allowed ; there must be word inbetween commas
    // there must be atleast one comma
    
    var test = function(STR) {
      return /[-\w\s]+(,[-\w\s]+)*/g.test(STR);
    }
    
    
    //must Pass
    console.log('===== PASS ============');
    console.log(test('1000,two thousand,3000'));
    console.log(test('1000 , 2000 , 3000'));
    console.log(test('First Option,2Nd Option, THIRD Option'));
    
    //must fail
    console.log('===== FAIL ============');
    console.log(test('Single Value'));
    console.log(test('1000 ,, 2000 , 3000'));
    console.log(test('1000 , 2000 , 3000,'));
    console.log(test(',,1000 , 2000 , 3000'));
    console.log(test('1000 , 2000 , 3000,,'));
    

1 个答案:

答案 0 :(得分:2)

您应该删除/g,因为您使用RegExp.test(),添加主播^$(禁止部分匹配)并将*替换为+ /^[-\w\s]+(,[-\w\s]+)+$/.test(STR); ^ ^^ 量词(要求至少一个逗号):

\s

请参阅updated fiddleregex demo(我用常规空格替换---,----以进行演示)。

如果您想避免验证^\s*\w+(?:\s+\w+)*(?:\s*,\s*\w+(?:\s+\w+)*)+\s*$ 等序列,可以进一步增强正则表达式:

^\s*

请参阅another regex demofiddle

这个正则表达式匹配任何带有前导/尾随可选空格的字符串(由于\s*$\w+(?:\s+\w+)*),它以一个单词开头,后跟零个或多个空格+单词(SELECT auth_group.id, auth_group.name, (SELECT COUNT(auth_user_groups.id) FROM auth_user_groups WHERE auth_user_groups.group_id = auth_group.id AND auth_user_groups.user_id IN (SELECT auth_user.id FROM auth_user WHERE username LIKE '%x%')) AS user_cnt FROM auth_group ORDER BY user_cnt DESC; }并且可以使用可选空格,逗号和一个单词后跟空格+单词(0次或更多次)来执行此操作一次或多次。