在正则表达式中使圆括号可选

时间:2016-06-22 12:33:39

标签: jquery regex validation

我尝试使用jQuery验证器中的正则表达式验证文本输入以匹配模式,该验证器接受数字和子图示例:1,2,3(a),4(b),5

我想让括号可选:

$.validator.addMethod("regx", function(value, element, regexpr) { 

return this.optional(element) || /^^\d\((.)\)+(,\d\((.)\)+)*$/i.test(value);
}, "Please enter valid numbers separated by a ', '");

1 个答案:

答案 0 :(得分:0)

我建议从块中构建所需的正则表达式,以提高可读性和可维护性:

$.validator.addMethod("regx", function(value, element, regexpr) { 
  var digits = "\\d+";                              // 1 or more digits...
  var digits_parens = digits + "(?:\\([^()]+\\))?"; // followed with an optional parenthetical substring having no ( and ) inside
  var rx = "^" + digits_parens + "(?:,\\s*" + digits_parens + ")*$"; // Final pattern
  return this.optional(element) || RegExp(rx).test(value);
}, "Please enter valid numbers separated by a ', '");

生成的模式如下所示:

^\d+(?:\([^()]+\))?(?:,\s*\d+(?:\([^()]+\))?)*$

请参阅regex demo

其中:

  • ^ - 字符串的开头
  • \d+(?:\([^()]+\))? - 1+位后跟1或0个parnetheses
  • (?:,\s*\d+(?:\([^()]+\))?)* - ,后跟0 +空格(\s*
  • 后上述子模式的0+序列
  • $ - 字符串结束。

请注意,不需要使用/i修饰符,因为在模式中没有可以区分大小写的字母。