Member 12758475 Ответов: 3

Как проверить, состоит ли строка только из чисел в C#, и убедиться в этом?


Я определил строковый тип данных и попросил пользователя ввести свой номер ячейки, например 1234567890. Теперь, как я могу проверить этот ввод и проверить, состоит ли строка только из чисел?

Что я уже пробовал:

Я только начал. Я понятия не имею, что попробовать

Mehdi Gholam

Попробуйте ограничиться числами из слоя пользовательского интерфейса.

BillWoodruff

Это C# ? WinForms ? Вы знакомы с Linq ? Вы понимаете, как использовать ключевые обработчики событий ?>

3 Ответов

Рейтинг:
2

F-ES Sitecore

Длинный ответ заключается в том, что вы этого не делаете. Кто - то может захотеть разместить свой номер, например

0700 123 456

Возможно, им потребуется добавить код страны

+44(0)700 123 456

Они, возможно, захотите, чтобы добавить расширение

+44(0)700 123 456 x789

Если бы я попытался ввести свой номер на вашем сайте, ваше ограничение остановило бы меня.

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

c# - регулярное выражение только для чисел - переполнение стека[^]

Однако я бы посоветовал вам искать регулярное выражение, которое ориентировано на телефонные номера, а не только на цифры.


Рейтинг:
0

khanabrar

Привет, вы можете заблокировать их, чтобы ввести символ в текстовое поле с помощью javascript.


<asp:TextBox runat="server" ID="txt" onkeypress="return checkNumeric(event);" Width="50%" MaxLength="10"></asp:TextBox>


а функция javascript такова
function checkNumeric(e) {//debugger;
    //alert(e.keyCode);
    if (window.event) // IE 
    {
        if (e.keyCode < 48 || e.keyCode > 57) {
            event.returnValue = false;
            return false;
        }
    }
    else {
        if (e.which < 48 || e.which > 57) {
            return false;
        }
    }


}


Рейтинг:
0

#realJSOP

В зависимости от типа этого номера вы можете использовать xxx.TryParse() (где "xxx" - это рассматриваемый числовой тип данных).

string x = "1234";
string y = "-1234";
string z = "12b34";
int value;
if (int.TryParse(x, out value))
{
    // x is indeed a valid integer, so value will be equal to 1234.
}
if (int.TryParse(y, out value))
{
    // y is a valid integer value, so value will be equal to -1234.
}
if (int.TryParse(z, out value))
{
}
else
{
     // z is NOT a valid integer.
}


Когда TryParse() возвращается, value содержит 32-разрядное целочисленное значение со знаком, эквивалентное числу, содержащемуся в исходной строке, если преобразование прошло успешно, или нулю, если преобразование завершилось неудачно. Преобразование завершается неудачно, если параметр исходной строки равен null или String.Empty, не имеет правильного формата или представляет собой число меньше, чем int.MinValue или больше, чем int.MaxValue Этот параметр передается неинициализированным; любое значение, первоначально заданное в результате, будет перезаписано.

Все внутренние числовые типы имеют TryParse() метод.


F-ES Sitecore

Многие телефонные номера слишком велики, чтобы хранить их как int.

#realJSOP

MVC имеет атрибуты, которые можно использовать, чтобы указать, что поле является номером телефона, и проверка происходит соответствующим образом. Если вы хотите проверить номер телефона с помощью TryParse, используйте double.TryParse или decimal.Метод tryparse. Они достаточно большие, чтобы обрабатывать телефонные номера. Я использовал int.TryParse в качестве примера, а затем заявил, что все внутренние числовые типы имеют метод TryParse. Я прикрыт.

F-ES Sitecore

Я почти уверен, что MVC не имеет проверки телефонных номеров, вы можете думать о входных атрибутах html5, но все, что делается на клиенте, должно быть сделано и на сервере, так как все, что делается на клиенте, можно обойти.

Далее, если ОП последует вашему совету и у него будут слишком большие цифры, неужели вы действительно думаете, что он поймет, что ему нужно использовать более крупный тип? Или он просто вернется и отправит еще один вопрос: "я сохраняю телефонные номера в int, и я получаю арифметическое переполнение?"

Что касается использования double для хранения телефонных номеров, то это еще хуже, чем int, поскольку двойники хранятся как приближения чисел, они не точны и не должны использоваться для хранения вещей, где точность жизненно важна. Вы сохраните номер телефона 123456789, но получите 12345692, когда прочтете его обратно.

Данные всегда должны храниться в соответствующих типах, и чем дальше тип находится от данных, которые вы храните, тем больше проблем это будет представлять. Посмотрите на множество проблем здесь, потому что люди хранят даты в виде строк или списки идентификаторов в виде строки, разделенной запятыми, а затем в конечном итоге они сталкиваются с непреодолимыми проблемами, и это то, что вы получите, если будете хранить телефонные номера в виде любого числового типа данных. Как минимум, я бы рассмотрел хранение телефонного номера в виде строки, но пуристы, вероятно, скажут, что вы должны создать свой собственный класс PhoneNumber для его хранения.