我尝试使用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 ', '");
答案 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*
)$
- 字符串结束。请注意,不需要使用/i
修饰符,因为在模式中没有可以区分大小写的字母。