Regex: Почему @ "^ ([0-9] | 10)" не соответствует '10'? - PullRequest
1 голос
/ 15 февраля 2011

Я хочу проверить, что текстовое поле содержит только цифры от 0 до 10.

Это регулярное выражение, которое я сейчас использую:

@"^([0-9]|10)"

Но это толькосоответствует 0-9.Что я должен изменить, чтобы он соответствовал 10 ??

Спасибо!

Ответы [ 4 ]

15 голосов
/ 15 февраля 2011

1 из 10 соответствует [0-9], потому что механизм регулярных выражений совпадает слева направо.А поскольку вы только привязали начало ввода: ^, двигатель будет удовлетворен, если 1 соответствует.

Существует два решения.

1 - поменяйте местами:

@"^(10|[0-9])"

или

2 - закрепите его с помощью $:

@"^([0-9]|10)$"
2 голосов
/ 15 февраля 2011
^(10|[0-9])

Поскольку [0-9] сначала совпадало с 1 из 10.

1 голос
/ 15 февраля 2011

Это может быть "ленивый", совпадающий с первым потенциальным совпадением, то есть "1" против "10". Возможно, попробуйте изменить порядок:

"^(10|[0-9])"

Это означает, что регулярное выражение сначала проверяет «10», и проверяет [0-9], только если нет «10»

Если это не сработает, возможно, есть флаг, который вы можете

0 голосов
/ 15 февраля 2011

Используйте это @ "^ (10 | [0-9])".В противном случае он будет обрабатывать 1 из 10 как первое совпадение с первым условием и поэтому не будет соответствовать условию ИЛИ.

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