Как проверить что в тексте ровно 4 цифры?

143
20 октября 2019, 08:50
      public static bool ValidatePin(string pin)
      {
         return Regex.IsMatch(pin, "^[0-9]{4}$|^[0-9]{6}$");
      }

Wrong output for "1234\n"
Expected: False
But was: True

Как сделать так, что бы пропускало исключительно если цифры занимают всю строку. Или 4 цифры или 6. И не пропускать с пробелом или переносом каретки.

Answer 1

Не спец по Regex, но вы же можете и без него обойтись, например

public static bool ValidatePin2(string pin)
{
    if(string.IsNullOrEmpty(pin)) return false;
    if (pin.Length!=4 && pin.Length!=6) return false;
    return pin.All(char.IsDigit);
}
Answer 2

вот с этим выражение работает правильно @"^[0-9]{4}\z|^[0-9]{6}\z"

Answer 3

Поскольку Perl возвращает строку с новой строкой в конце при чтении строки из файла, механизм регулярных выражений Perl соответствует $ в позиции перед разрывом строки в конце строки, даже если multi-line mode выключен. Perl также соответствует $ в самом конце строки, независимо от того, является ли этот символ разрывом строки. Поэтому ^\d+$ соответствует 123 независимо от того, является ли подстрока 123 или 123\n. Большинство современных вариантов регулярных выражений скопировали это поведение. Это включает в себя .NET. Если требуется соответствие только в абсолютном конце строки, используйте \z (нижний регистр z вместо верхнего регистра Z). \A\d+\z не соответствует 123\n. перевел вот отсюда https://www.regular-expressions.info/anchors.html

READ ALSO
Как преобразовать IEnumerable<JToken> в Linq.JToken

Как преобразовать IEnumerable<JToken> в Linq.JToken

У меня есть JObjectПосле выборки не могу преобразовать в JToken

113
Как передать context в класс ASP.NET MVC CORE

Как передать context в класс ASP.NET MVC CORE

Не могу разобраться, как все таки правильно, с контроллера передавать данные из БД в класс или все таки в классе получать доступ к БД? Например:...

162
Как достать объекты из БД и занести их в picker

Как достать объекты из БД и занести их в picker

Чтобы, при выборе в нём, они заносились в новый список, чтобы произвести с ними расчётыЗаранее благодарю за помощь

151