1
0
Files
OAiP-Presnyakov_Ilya-Labora…/Services/InputValidator.cs
Debug_pro fb13e5a20a upload
2026-06-07 18:19:53 +03:00

67 lines
3.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System.Text.RegularExpressions;
namespace SimpleWiki.Services;
public static class InputValidator
{
private static readonly Regex EmailRegex = new(@"^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$", RegexOptions.Compiled);
private static readonly Regex FullNameRegex = new(@"^[A-Za-zА-Яа-яЁё\-\s]{2,100}$", RegexOptions.Compiled);
private static readonly Regex PasswordRegex = new(@"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^A-Za-z\d]).{8,64}$", RegexOptions.Compiled);
private static readonly Regex CodeRegex = new(@"^\d{6}$", RegexOptions.Compiled);
public static string? ValidateFullName(string? value)
{
if (string.IsNullOrWhiteSpace(value)) return "ФИО обязательно.";
if (!FullNameRegex.IsMatch(value.Trim())) return "ФИО: только буквы, пробелы и дефис, от 2 до 100 символов.";
return null;
}
public static string? ValidateEmail(string? value)
{
if (string.IsNullOrWhiteSpace(value)) return "Email обязателен.";
if (value.Length > 256) return "Email слишком длинный.";
if (!EmailRegex.IsMatch(value.Trim())) return "Некорректный email.";
return null;
}
public static string? ValidatePassword(string? value)
{
if (string.IsNullOrWhiteSpace(value)) return "Пароль обязателен.";
if (!PasswordRegex.IsMatch(value)) return "Пароль: 8-64 символа, минимум 1 строчная, 1 заглавная, 1 цифра и 1 спецсимвол.";
return null;
}
public static string? ValidateResetCode(string? value)
{
if (string.IsNullOrWhiteSpace(value)) return "Код подтверждения обязателен.";
if (!CodeRegex.IsMatch(value.Trim())) return "Код должен состоять из 6 цифр.";
return null;
}
public static string? ValidateArticleTitle(string? value)
{
if (string.IsNullOrWhiteSpace(value)) return "Заголовок обязателен.";
if (value.Trim().Length < 3 || value.Trim().Length > 150) return "Заголовок: от 3 до 150 символов.";
return null;
}
public static string? ValidateArticleSummary(string? value)
{
if (string.IsNullOrWhiteSpace(value)) return "Краткое описание обязательно.";
if (value.Trim().Length < 10 || value.Trim().Length > 400) return "Краткое описание: от 10 до 400 символов.";
return null;
}
public static string? ValidateArticleMarkdown(string? value)
{
if (string.IsNullOrWhiteSpace(value)) return "Текст статьи обязателен.";
if (value.Trim().Length < 20 || value.Trim().Length > 20000) return "Текст статьи: от 20 до 20000 символов.";
return null;
}
public static string JoinErrors(params string?[] errors)
{
return string.Join(Environment.NewLine, errors.Where(x => !string.IsNullOrWhiteSpace(x)));
}
}