正则表达式,用于检查Flex中逗号分隔的数字值

时间:2011-03-10 15:54:16

标签: regex flex actionscript-3

任何人都可以帮我找到合适的正则表达式来验证一个逗号分隔数字的字符串,例如'1,2,3''111,234234,-09'等。其他任何内容均应视为无效。例如'121as23''123-123'无效。

我认为在使用正则表达式的Flex中这一定是可能的,但我找不到正确的正则表达式。


@Justin,我尝试了你的建议/(?=^)(?:[,^]([-+]?(?:\d*\.)?\d+))*$/,但我面临两个问题:

  1. 它会使'123,12'无效,这应该是真的。
  2. 不会使无效的'123,123,aasd'无效。
  3. 我尝试了另一个正则表达式 - [0-9]+(,[0-9]+)* - 除了一个问题外,效果很好:它验证了'12,12asd'。我需要的东西只允许用逗号分隔数字。

2 个答案:

答案 0 :(得分:3)

看起来你想要的是这个:

/(?!,)(?:(?:,|^)([-+]?(?:\d*\.)?\d+))*$/

我不知道Flex,所以在开头替换/并以Flex regex语法中的相应内容结束。您的数字将在匹配集1中。如果您只想允许整数,请删除(?:\d*\.)?

说明:

(?!,)         #Don't allow a comma at the beginning of the string.
(?:,|^)       #Your groups are going to be preceded by ',' unless they're the very first group in the string. The '(?:blah)' means we don't want to include the ',' in our match groups.
[-+]?         #Allow an optional plus or minus sign.
(?:\d*\.)?\d+ #The meat of the pattern, this matches '123', '123.456', or '.456'.
*             #Means we're matching zero or more groups. Change this to '+' if you don't want to match empty strings.
$             #Don't stop matching until you reach the end of the string.

答案 1 :(得分:2)

您的示例数据由三个十进制整数组成,每个整数都有一个可选的前导加号或减号,用逗号分隔,没有空格。假设这描述了您的要求,Javascript / ActionScript / Flex正则表达式很简单:

var re_valid = /^[-+]?\d+(?:,[-+]?\d+){2}$/;
if (re_valid.test(data_string)) {
    // data_string is valid
} else {
    // data_string is NOT valid
}

但是,如果您的数据可以包含任意数量的整数并且可能有空格,则正则表达式会变得更长:

var re_valid = /^[ \t]*[-+]?\d+[ \t]*(,[ \t]*[-+]?\d+[ \t]*)*$/;

如果您的数据可能更复杂(即数字可能是浮点数,值可能用引号括起来等),那么您可能最好将字符串解析为CSV记录,然后检查每个值单独