Регулярное выражение для проверки значений разделенных запятыми чисел в Flex - PullRequest
3 голосов
/ 10 марта 2011

Может ли кто-нибудь помочь мне найти подходящее регулярное выражение для проверки строки, которая разделена запятыми, например, например, '1,2,3' или '111,234234,-09' и т. Д. Все остальное следует считать недействительным. например, '121as23' или '123-123' недействительно.

Полагаю, это должно быть возможно во Flex с использованием регулярного выражения, но я не могу найти правильное регулярное выражение.


@ Джастин, я попробовал ваше предложение /(?=^)(?:[,^]([-+]?(?:\d*\.)?\d+))*$/, но я столкнулся с двумя проблемами:

  1. Это сделает недействительным '123,12', что должно быть правдой.
  2. Это не сделает недействительным '123,123,aasd', что неверно.

Я попробовал другое регулярное выражение - [0-9]+(,[0-9]+)* - которое работает довольно хорошо, за исключением одной проблемы: оно проверяет '12,12asd'. Мне нужно что-то, что позволит только числа, разделенные запятыми.

Ответы [ 2 ]

3 голосов
/ 10 марта 2011

Похоже, что вы хотите вот что:

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

Я не знаю Flex, поэтому замените / в начале и закончите тем, что подходит в синтаксисе регулярных выражений Flex.Ваши номера будут в наборе совпадений 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.
2 голосов
/ 10 марта 2011

Данные вашего примера состоят из трех десятичных целых чисел, каждое из которых имеет необязательный начальный знак плюс или минус, разделенные запятыми без пробелов. Предполагая, что это описывает ваши требования, регулярное выражение 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, а затем проверить каждое значение в индивидуальном порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...