我正在编写以下正则表达式来验证Excel工作表格式中的不同货币条目:
/^((\s*[\$]?[+-]?\d*|(\d{0,3}(\s?\d{3})*)(,\d+)?[\$]?(\s*[sSrR]\s*(\d+|(\d+-\d+)))?)|((\s*[\$]?[+-]?\d*|(\d{0,3}(\s?\d{3})*)(,\d+)?[\$]?(\t\s*[\$]?[+-]?\d*|(\d{0,3}(\s?\d{3})*)(,\d+)?[\$]?)*[\n\rx]*)+))$/
此正则表达式是通过以下javascript代码生成的:
var groupingSeparator = "\\s"; // For euro currency
var decimalSeparator = ","; // for euro currency
var NUMBER = "\\s*[\\$]?[+-]?\\d*|(\\d{0,3}(" + groupingSeparator + "?\\d{3})*)(" + decimalSeparator + "\\d+)?[\\$]?";
this.basicNumberRegExp = NUMBER;
var REPEAT_NUMBER = NUMBER + "(\\s*[sSrR]\\s*(\\d+|(\\d+-\\d+)))?";
var EXCEL_LINE = NUMBER + "(\\t" + NUMBER + ")*";
var EXCEL_MULTI_LINE = "(" + EXCEL_LINE + "[\\n\\rx]*)+";
var ret = "^((" + REPEAT_NUMBER + ")|(" + EXCEL_MULTI_LINE + "))$";
它应验证以下条目:
3r3
-3r3
333
-333
333,33
-333,33
333 333
-333 33
但它没有匹配/验证以下值,原因是什么:
-3r3
答案 0 :(得分:3)
你错过了一对括号。
您已定义
var NUMBER = "\\s*[\\$]?[+-]?\\d*|(\\d{0,3}(" + groupingSeparator + "?\\d{3})*)(" + decimalSeparator + "\\d+)?[\\$]?";
太长了,但基本上是
var NUMBER = "(...) | (...)";
声明
var REPEAT_NUMBER = NUMBER + "(\\s*[sSrR]\\s*(\\d+|(\\d+-\\d+)))?";
,REPEAT_NUMBER
定义为
"(...) | (...)(...)?"
被解析为(因为|
的优先级低于连接)
"(...) | ((...)(...)?)"
添加一对括号将起作用。定义
var NUMBER = "(\\s*[\\$]?[+-]?\\d*|(\\d{0,3}(" + groupingSeparator + "?\\d{3})*)(" + decimalSeparator + "\\d+)?[\\$]?)";