Что C# эквивалентен из NaN или IsNumeric?

** Предупреждение: подход, описанный в этом ответе, применим только к очень конкретным сценариям и не является безопасным, поскольку атаки SQL-инъекции не только полагаются на возможность вставлять X=Y. **

Если злоумышленники пытаются взломать форму с помощью переменной PHP $_GET или с помощью строки запроса URL, вы сможете поймать их, если они не защищены.

RewriteCond %{QUERY_STRING} ([0-9]+)=([0-9]+)
RewriteRule ^(.*) ^/track.php

Поскольку 1=1, 2=2, 1=2, 2=1, 1+1=2 и т. д. ... являются распространенными вопросами к базе данных SQL злоумышленника. Возможно, он также используется многими хакерскими приложениями.

Но вы должны быть осторожны, чтобы не переписывать безопасный запрос с вашего сайта. Вышеупомянутый код дает вам возможность переписать или перенаправить (зависит от вас) эту динамическую строку запроса, зависящую от хакерства, на страницу, в которой будет храниться IP-адрес злоумышленника или EVEN THEIR COOKIES, история , браузера или любой другой конфиденциальной информации, поэтому вы можете иметь дело с ними позже, запретив их учетную запись или контактные органы.

99
задан Kirill Kobelev 9 December 2016 в 02:18
поделиться

7 ответов

Это не имеет regex наверху

double myNum = 0;
String testVar = "Not A Number";

if (Double.TryParse(testVar, out myNum)) {
  // it is a number
} else {
  // it is not a number
}

Кстати, все стандартные типы данных, за явным исключением GUID, поддерживает TryParse.

обновление
secretwep поднял это значение "2345", пройдет вышеупомянутый тест как число. Однако, если необходимо удостовериться, что все символы в строке являются цифрами, тогда другой подход должен быть проявлен.

пример 1 :

public Boolean IsNumber(String s) {
  Boolean value = true;
  foreach(Char c in s.ToCharArray()) {
    value = value && Char.IsDigit(c);
  }

  return value;
}

или если Вы хотите быть немного более необычны

public Boolean IsNumber(String value) {
  return value.All(Char.IsDigit);
}
170
ответ дан NotMe 24 November 2019 в 04:58
поделиться

Я предпочитаю что-то вроде этого, это позволяет Вам решить что NumberStyle для тестирования на.

public static Boolean IsNumeric(String input, NumberStyles numberStyle) {
    Double temp;
    Boolean result = Double.TryParse(input, numberStyle, CultureInfo.CurrentCulture, out temp);
    return result;
}
41
ответ дан Anthony Mastrean 24 November 2019 в 04:58
поделиться

В дополнение к предыдущим корректным ответам, вероятно, стоит указать, что "Не Число" (NaN) в его общем использовании не эквивалентно строке, которая не может быть оценена как числовое значение. NaN обычно понимается, поскольку числовое значение раньше представляло результат "невозможного" вычисления - где результат не определен. В этом отношении я сказал бы, что использование JavaScript является немного вводящим в заблуждение. В C# NaN определяется как свойство единственных и двойных числовых типов и используется для обращения явно к результату погружающегося нуля нулем. Другие языки используют его для представления различных "невозможных" значений.

19
ответ дан Stu Mackellar 24 November 2019 в 04:58
поделиться

Да, IsNumeric является VB. Обычно люди используют TryParse () метод, хотя это немного неуклюже. Как Вы предположили, можно всегда писать собственное.

int i;
if (int.TryParse(string, out i))
{

}
5
ответ дан Jay Bazuzi 24 November 2019 в 04:58
поделиться

VB имеет эти IsNumeric функция. Вы могли сослаться Microsoft.VisualBasic.dll и использовать его.

4
ответ дан Chad 24 November 2019 в 04:58
поделиться
public static bool IsNumeric(string anyString)
{
    if (anyString == null)
    {
        anyString = "";
    }

    if (anyString.Length > 0)
    {
        double dummyOut = new double();
        System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo("en-US", true);
        return Double.TryParse(anyString, System.Globalization.NumberStyles.Any, cultureInfo.NumberFormat, out dummyOut);
    }
    else
    {
        return false;
    }
}
3
ответ дан 24 November 2019 в 04:58
поделиться

Возможно, это особенность C# 3, но вы могли бы использовать double.NaN.

3
ответ дан 24 November 2019 в 04:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: