-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathInputValidation.cs
More file actions
173 lines (158 loc) · 6.56 KB
/
InputValidation.cs
File metadata and controls
173 lines (158 loc) · 6.56 KB
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
using System.Globalization;
namespace Jobseekers
{
/// <summary>
/// Třída InputValidation obsahuje metody pro validaci uživatelských vstupů
/// </summary>
public class InputValidation
{
/// <summary>
/// Metoda vrací zvalidovaný název (křestní jméno, příjmení, město atd.)
/// </summary>
/// <returns>Zvalidovaný název</returns>
public static string GetValidatedName()
{
string userInput;
while (string.IsNullOrWhiteSpace(userInput = Console.ReadLine()?.Trim() ?? "")
|| !IsFirstLetterUppercase(userInput)
|| ContainsDigitsOrSpecialCharacters(userInput))
{
Console.WriteLine("Něco se pokazilo! Nesmíte používat číslice ani speciální znaky, zároveň musíte začínat velkým písmenem.");
Console.Write("Zkuste to znovu: ");
}
return userInput;
}
/// <summary>
/// Metoda vrací zvalidovaný datum v požadovaném formátu a zároveň hlídá, aby byl kandidát plnoletý
/// </summary>
/// <returns>Zvalidovaný datum narození</returns>
public static DateTime GetValidatedDate()
{
DateTime validDate;
string userInput;
while (string.IsNullOrWhiteSpace(userInput = Console.ReadLine()?.Trim() ?? "")
|| !DateTime.TryParseExact(userInput, "dd.MM.yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out validDate)
|| !IsCandidateAdult(validDate))
{
Console.WriteLine("Ajajaj, někde se stala chyba! Datum musí být ve formátu dd.MM.yyyy a kandidát musí být starší 18 let.");
Console.Write("Zkuste to znovu: ");
}
return validDate;
}
/// <summary>
/// Metoda vrací zvalidované telefonní číslo v požadovaném formátu
/// </summary>
/// <returns>Zvalidované telefonní číslo</returns>
public static string GetValidatedPhoneNumber()
{
string userInput;
while (string.IsNullOrWhiteSpace(userInput = Console.ReadLine()?.Trim() ?? "") || !IsValidPhoneNumber(userInput))
{
Console.WriteLine("Neplatné telefonní číslo! Číslo musí být ve formátu +420 xxx xxx xxx a obsahovat pouze číslice.");
Console.Write("Zkuste to znovu: ");
}
return userInput;
}
/// <summary>
/// Metoda vrací zvalidovaný e-mail
/// </summary>
/// <returns>Zvalidovaný e-mail</returns>
public static string GetValidatedEmail()
{
string userInput;
while (string.IsNullOrWhiteSpace(userInput = Console.ReadLine()?.Trim() ?? "") || !IsValidEmail(userInput))
{
Console.WriteLine("Neplatný e-mail! Zadejte e-mailovou adresu ve formátu example@example.com.");
Console.Write("Zkuste to znovu: ");
}
return userInput;
}
/// <summary>
/// Metoda vrací zvalidované ID
/// </summary>
/// <returns>Zvalidované ID</returns>
public static int GetValidatedId()
{
int userInput;
while (!int.TryParse(Console.ReadLine(), out userInput))
{
Console.WriteLine("Neplatné ID. Zadejte prosím znovu:");
}
return userInput;
}
// Metoda ověřuje ID programovacích jazyků zadaných uživatelem
public static List<int> GetValidatedProgrammingLanguageIds()
{
List<int> ids = [];
bool isValid = false;
while (!isValid)
{
try
{
var input = Console.ReadLine()!.Trim();
ids = input.Split(',')
.Select(id => int.Parse(id.Trim()))
.ToList();
isValid = true; // Vstup je platný, ukončíme cyklus
}
catch (FormatException)
{
Console.WriteLine("Chyba: Zadejte prosím pouze čísla oddělená čárkou. Zkuste to znovu.");
}
}
return ids;
}
/// <summary>
/// Metoda vrací odpověď na otázku, jestli uživatelský vstup začíná velkým písmenem
/// </summary>
/// <param name="userInput">Uživatelský vstup</param>
private static bool IsFirstLetterUppercase(string userInput)
{
return char.IsUpper(userInput[0]);
}
/// <summary>
/// Metoda vrací odpověď na otázku, jestli uživatelský vstup obsahuje speciální znaky
/// </summary>
/// <param name="userInput">Uživatelský vstup</param>
private static bool ContainsDigitsOrSpecialCharacters(string userInput)
{
foreach (char symbol in userInput)
{
if (char.IsDigit(symbol) || char.IsSymbol(symbol) || char.IsPunctuation(symbol))
{
return true;
}
}
return false;
}
/// <summary>
/// Metoda vrací odpověď na otázku, jestli je kandidát starší osmnácti let
/// </summary>
/// <param name="birthDate"></param>
private static bool IsCandidateAdult(DateTime birthDate)
{
return birthDate.AddYears(18) <= DateTime.Now;
}
/// <summary>
/// Metoda vrací odpověď na otázku, jestli zadané telefonní číslo odpovídá požadovaného formátu
/// </summary>
/// <param name="phoneNumber">Telefonní číslo</param>
private static bool IsValidPhoneNumber(string phoneNumber)
{
// Regulární výraz pro formát +420 xxx xxx xxx
string pattern = @"^\+420 \d{3} \d{3} \d{3}$";
return System.Text.RegularExpressions.Regex.IsMatch(phoneNumber, pattern);
}
/// <summary>
/// Metoda vrací odpověď na otázku, jestli zadaný e-mail odpovídá požadovanému formátu
/// </summary>
/// <param name="email"></param>
/// <returns></returns>
private static bool IsValidEmail(string email)
{
// Regulární výraz pro kontrolu formátu e-mailu
string pattern = @"^[^@\s]+@[^@\s]+\.[^@\s]+$";
return System.Text.RegularExpressions.Regex.IsMatch(email, pattern);
}
}
}