С# 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 }