Нужно регулярное выражение для списка номеров через запятую - PullRequest
1 голос
/ 19 января 2011

Это должно быть просто для опытных авторов регулярных выражений, но я не пишу их много, так что ...

Я хочу выполнить проверку ввода в текстовом поле формы C # MVC, возможно, используя javascript или jquery.

Я хочу ограничить ввод списком целых чисел через запятую. Список должен начинаться с цифры> = 0, за которой следует запятая, а затем повторять этот шаблон. список может заканчиваться или не заканчиваться запятой:

1,2,444,5, - Пропуск

1,2444,5 - Пропуск

, 1,2,444,5, - Fail

, 1,2,444,5 - Fail

1, 2,444,5 - Fail

1,, 2,444,5 ,, - Fail

Я написал это: ^([0-99],?)+$ и протестировал его на regexlib.com, и, похоже, он работает, но тестер возвращает 2 совпадения, и я не уверен, что это значит. Так как он не работает в описанных выше случаях Failing, я предполагаю, что это будет безопасно для простой проверки ввода. Есть ли лучший шаблон?

Менее важный вопрос: почему разрешается 444, когда диапазон составляет 0-99?

Ответы [ 3 ]

5 голосов
/ 19 января 2011

оператор диапазона существует только для указания диапазона символов ASCII, а не чисел.Попробуйте вместо этого:

^([0-9]+,?)+$

3 голосов
/ 19 января 2011

Ваше регулярное выражение неверно: оно говорит "с начала строки, сопоставьте одну или несколько групп таким образом, чтобы группа состояла из цифр от 0 до 9 (другие 9 - избыточные), возможно, с запятой. До конца ».

Это явно не то, что вы хотите. Вам нужно это:

^\d+(?:,\d+)*$

Соответствует: «от начала совпадения строки до одной или нескольких цифр, за которыми могут следовать группы, состоящие из запятой, за которой следуют одна или несколько цифр, до конца строки». Группы не захватывают одну, поэтому вы можете иметь не более одного совпадения.

0 голосов
/ 19 января 2011

^ (([0-9],?) +) $ Или ^ ([0-9],?) + $ / В зависимости от повторного использования

Test

my %a=qw(1,2,444,5,  Pass
1,2,444,5  Pass
,1,2,444,5, Fail
,1,2,444,5  Fail
1,,2,444,5  Fail
1,,2,444,5,, Fail
);

while(my ($k,$v)=each(%a)) {
    $vv = ($k =~ m/^(([0-9],?)+)$/) ? "Pass" : "Fail";
    print "$k $v $vv\n";
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...