Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
 Аватар для Volga_Olga
1 / 1 / 0
Регистрация: 07.08.2022
Сообщений: 29
.NET 7

Как игнорировать правило FluentValidation, если объект имеет значение null?

06.02.2023, 16:31. Показов 1430. Ответов 16

Студворк — интернет-сервис помощи студентам
подскажите пожалуста с написанием кода.Как правильно это прописать код?Например нужно указать номер телефона в строке.валидация делает ограничение в 11 цифр.Как игнорировать правило FluentValidation, если объект имеет значение null?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.02.2023, 16:31
Ответы с готовыми решениями:

Ошибка, объект имеет значение null
Подскажите, как исправить ошибку в моём коде. Мне нужно, чтобы кнопка Searsh становилась активна, только если ни в одном из активных...

Какой тип имеет переменная, если её значение null? QJsonDocument
{a: "тип QString", b: 10, // определяет как double c: null // а здесь какой typeName() ? } Т.е. мне нужно проверить, объявлен...

Объект имеет значения null
Здравствуйте проблема такова: панель для рисования zedGraphControl почему-то возвращает значение null. и что только уже не пробовал,...

16
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,073
06.02.2023, 19:13
Volga_Olga, В строке каждый символ проверяется с помощью функции char.IsDigit, а насчет как проверить и посчитать думаю вам не надо объяснять
1
 Аватар для Volga_Olga
1 / 1 / 0
Регистрация: 07.08.2022
Сообщений: 29
06.02.2023, 19:59  [ТС]
если вы смогли обьяснить это было бы не лишним
0
 Аватар для XIST
1960 / 1070 / 148
Регистрация: 01.10.2009
Сообщений: 3,591
Записей в блоге: 1
06.02.2023, 20:05
Volga_Olga, чет не очень понятно, как там валидируете и что там происходит, а так
C#
1
if (object is  null) return;
0
 Аватар для Volga_Olga
1 / 1 / 0
Регистрация: 07.08.2022
Сообщений: 29
06.02.2023, 20:53  [ТС]
есть строка где вводится номер телефона ,но если ввести 00000000000 то код тоже работает как введенный номер телефона, а не должно так работать.С помощью этой функции char.IsDigit просто проверяется на количество цифр .но нужно что бы просто нули тоже не работали

Добавлено через 7 минут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class PhoneValidator : ValidationAttribute
        {
            public string errorLenght = "The length of the Phone number must contain 11 digits";
            public string errorNumber = "the Phone number is incorrect";
            public string errorType = "The given value is not a Phone  number";
            protected override ValidationResult IsValid(object value, ValidationContext validationContext)
            {
                string number = value.ToString();
 
                if (number.Length != 11 || number.Any(chr => !Char.IsDigit(chr)))
                     return new ValidationResult(errorLenght);
 
                int[] weights = { 6, 5, 7, 2, 3, 4, 5, 6, 7, 0, 8 };
                int sum = number.Zip(weights, (digit, weight) => (digit - '0') * weight).Sum();
 
                if ((sum % 12) == (number[10] - '0')) return ValidationResult.Success;
                else return new ValidationResult(errorNumber);
Добавлено через 11 минут
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
06.02.2023, 21:42
Volga_Olga, ну так распиши условия, в каких разрядах каких цЫфт быть не должно, ну или наоборот
0
 Аватар для Volga_Olga
1 / 1 / 0
Регистрация: 07.08.2022
Сообщений: 29
06.02.2023, 21:46  [ТС]
не могли бы вы написать пример как это выглядит?
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
06.02.2023, 21:51
например, первые либо 8 либо +7, код не может начинаться с 0, и тд, я ж не знаю твои требования к "правильности" номера
0
 Аватар для Volga_Olga
1 / 1 / 0
Регистрация: 07.08.2022
Сообщений: 29
06.02.2023, 21:54  [ТС]
а как это можно кодом прописать?может вы пример сможете написать.если начинается с цифры например .пусть будет 8
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
06.02.2023, 21:58
Volga_Olga, ты сюда словам напиши, потом уже код. куда ж вы все кидаетесь сразу что-то писать, когда формализовать хотелки, блин, не можете
0
 Аватар для Volga_Olga
1 / 1 / 0
Регистрация: 07.08.2022
Сообщений: 29
06.02.2023, 22:15  [ТС]
если нет то нет .спасибо за ответ который уже написали но если напишете код то вы мне очень поможете
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
06.02.2023, 22:17
что бы написать что-то рабочее, нужно понимать критерии правильности/неправильности, если даже это не понятно, то все очень печально.
З.Ы. пожалуйста, мда...
0
 Аватар для Volga_Olga
1 / 1 / 0
Регистрация: 07.08.2022
Сообщений: 29
06.02.2023, 22:24  [ТС]
исправление*: метод IsDigit проверяет является ли символ десятичной цифрой

Добавлено через 5 минут
критерии правильности я описала что могут быть только цифры ,но только нули нельзя .а у меня сейчас если ввести номер телефона нулями то считаеся рабочим.
если кто то сможет обьяснить и подсказать критерии правильности/неправильности то будет не так печально .все когда-то начинали....
0
2282 / 1598 / 400
Регистрация: 26.06.2017
Сообщений: 4,733
Записей в блоге: 1
06.02.2023, 23:24
Volga_Olga, как минимум для определения первой цифры требуется знать страну, для которой определяется валидность номера. Точно такое же требование и для длины самого номера (почему Вы ограничились 11-ю цифрами?). Вот об этих критериях правильности/неправильности вам толкуют. То есть в методе валидности куча неопределённости или хардкодинга. Метод валидации должен располагать критериями проверки (страна и её допустимые префиксы номера, длина номера, префиксы регионов/операторов и др.), иначе никак, ну или хардкодинг.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3403 / 2725 / 574
Регистрация: 04.09.2018
Сообщений: 8,553
Записей в блоге: 3
07.02.2023, 00:38
Лучший ответ Сообщение было отмечено Volga_Olga как решение

Решение

Цитата Сообщение от Uswer Посмотреть сообщение
как минимум для определения первой цифры требуется знать страну
Uswer, причем здесь страна? В задании явно указана максимальная длина номера; если из 11-ти цифр, то сгодится для Российских номеров. Если меньше (исключая префикс "код страны"), то ариведерчи.
Volga_Olga, для начала, пробуйте вот это:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// no need to use IgnorePatternWhiteSpace:
Console.WriteLine(TelNumberValidation("(909)122-5879"));        //true
Console.WriteLine(TelNumberValidation("900 100 1649"));         //true
Console.WriteLine(TelNumberValidation("9001001649"));           //true
Console.WriteLine(TelNumberValidation("900.100.1649"));         //true          
Console.WriteLine(TelNumberValidation("900 100 5478"));         //true
Console.WriteLine();
 
// not using Named Captures
Console.WriteLine(TelNumberValidation("(909)122-5879", 1));     //true
Console.WriteLine(TelNumberValidation("900 100 1649", 1));      //true
Console.WriteLine(TelNumberValidation("9001001649", 1));        //true
Console.WriteLine(TelNumberValidation("900.100.1649", 1));      //true
Console.WriteLine(TelNumberValidation("900 100 5478", 1));      //true
Console.WriteLine();
 
// if ExplicitCapture option is used
Console.WriteLine(TelNumberValidation("(909)122-5879", 2));     //true
Console.WriteLine(TelNumberValidation("900 100 1649", 2));      //true
Console.WriteLine(TelNumberValidation("9001001649", 2));        //false
Console.WriteLine(TelNumberValidation("900.100.1649", 2));      //true
Console.WriteLine(TelNumberValidation("900 100 5478", 2));      //true
Console.WriteLine();
 
// 11/10-digit numbers with and without a prefix (Russian standard)
Console.WriteLine(TelNumberValidation("(909)122-5879", 3));     //true
Console.WriteLine(TelNumberValidation("8(900)100-1649", 3));    //true
Console.WriteLine(TelNumberValidation("8(900)100-167", 3));     //false
Console.WriteLine(TelNumberValidation("+7(900)100-1649", 3));   //true
Console.WriteLine(TelNumberValidation("88(900)100-1649", 3));   //false
Console.WriteLine(TelNumberValidation("900 100 5478", 3));      //false
Console.WriteLine(TelNumberValidation("900 100 444", 3));       //false
Console.WriteLine();
 
 
static bool TelNumberValidation(string snum, int vp = 0)
{
    string pattern = vp switch
    {
        1 => @"^(?:\(?)(\d{3})(?:[\).\s]?)(\d{3})(?:[-\.\s]?)(\d{4})(?!\d)",
        2 => @"^\(?(?<AreaCode>\d{3})[\).\s]?(?<Prefix>\d{3})[-\.\s](?<Suffix>\d{4})(?!\d)",
        3 => @"^((8|\+7)?(\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}$",
        _ => @"^(?:\(?)(?<AreaCode>\d{3})(?:[\).\s]?)(?<Prefix>\d{3})(?:[-\.\s]?)(?<Suffix>\d{4})(?!\d)"
    };
 
    Regex rg = new(pattern);
    MatchCollection m = rg.Matches(snum);
    return m.Count > 0;
}
Console.Read();

Цитата Сообщение от Volga_Olga Посмотреть сообщение
а у меня сейчас если ввести номер телефона нулями то считаеся рабочим
Это оставим на закуску.
1
2282 / 1598 / 400
Регистрация: 26.06.2017
Сообщений: 4,733
Записей в блоге: 1
07.02.2023, 08:22
Цитата Сообщение от wizard41 Посмотреть сообщение
причем здесь страна?
При том, что априори не известен Телефонный план нумерации. Увидели 11 цифр и давай их валидировать!
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3403 / 2725 / 574
Регистрация: 04.09.2018
Сообщений: 8,553
Записей в блоге: 3
07.02.2023, 13:14
Цитата Сообщение от Uswer Посмотреть сообщение
что априори не известен Телефонный план нумерации
Вряд ли задача такого уровня - разрешать телефонные номера разных стран. Это свихнуться можно.
Дан 11-значный номер, стало быть валидация примерно следующая:
+ - лидирующий (может не быть)
7|8 - одно из чисел (для 11-ти значного тел обязательно) может не быть
ххх - 800 или 900-999, кроме 000
ххх - 001-999 (префикс) кроме 000
хххх - 0001-9999 (суффикс) кроме 0000
Ну и различные варианты разделителей между группами цифр..
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.02.2023, 13:14
Помогаю со студенческими работами здесь

Как объект может отсутствовать или быть null, если он уже выполняется
https://metanit.com/sharp/patterns/2.3.php class Singleton { private static Singleton instance; private Singleton() ...

Как игнорировать null значения в SQL запросе
Написал вот такой запрос @Repository public interface DepositMatrixDaoInt extends JpaRepository&lt;DepositMatrix, Long&gt; { ...

Ошибка "Поле не может содержние Null, так как свойство Required имеет значение True"
Когда пытаюсь заполнить таблицу из edit в БД (dbgrid) выдает ошибку &quot;Поле не может содержние Null , так как свойство Required имеет...

Как сделать так чтобы если пользователь ничего не вводит, то переменной присваивалось значение null?
Console.Write(&quot;Введите имя: &quot;); string x =Convert.ToString (Console.ReadLine()); x = x ?? &quot;Имя не...

SELECT игнорировать переменная =null
не пойму как сделать следующее. есть две переменные N и F нужно написать SELECT типа такого SELECT * from TABLE where NAME = N and...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru