С# Regex только для чисел и тире
В моем коде С# есть следующее: мне нравится, чтобы проверить, имеет ли выражение числа или тире, но ничего другого. Если я наберу букву K вместе с тире или номером, она все равно примет ее. Как я могу сказать, что экспресс является числом или тире:
Match match = Regex.Match(input, @"[0-9-]");
Обратите внимание, что ввод - это текст, который я передаю для оценки.
Ответы
Ответ 1
Match match = Regex.Match(input, @"^[0-9-]*$");
^
означает, что совпадение должно начинаться в начале ввода, $
, которое должно заканчиваться в конце ввода.
*
означает, что (только) должно быть 0 или более цифр или тире (используйте +
вместо 1 или более).
Ответ 2
Ваше регулярное выражение соответствует тому, что в строке существует любая цифра или тире, попробуйте следующее:
Regex.Match(input, @"^[\d-]+$");
^
Начало строки
[\d-]+
одна или несколько цифр или тире
$
Конец строки
Ответ 3
Любое из следующих Regex будет работать нормально.
[0-9\-]+ ( + one or more occurance)
[\d\-]+ (as \d represents numbers)
если вы хотите - должно быть между цифрами
[\d]+\-*[\d]+ will match any of following
90909900
9090-9009
900--900
если вы хотите использовать только одно - или нет - между цифрами,
то
[\d]+\-?[\d]+ will match any of following
90909900 pass
9090-9009 pass
900--900 fail
Ответ 4
Вам нужно избежать второй тире.
Match match = Regex.Match(input, @"[0-9\-]");
Я признаю, что не пробовал, но он должен работать.
Это будет работать только с одним символом. Если вы хотите, чтобы он взял более одного символа, например "123-5", измените ваше регулярное выражение на.
Match match = Regex.Match(input, @"[0-9\-]+");
Ответ 5
Если это массив строк, подумайте о том, чтобы сделать это с помощью LINQ?
if (arrInput.Any(s => (!Regex.IsMatch(s, @"^[\d-]+$")))){ //OK }