@@ -16,7 +16,7 @@ class SearchPattern(StrEnum):
16
16
17
17
18
18
@lru_cache
19
- def generic_searcher (pattern : str , text : str ) -> IntTuple :
19
+ def generic_searcher (pattern : SearchPattern , text : str ) -> IntTuple :
20
20
return tuple (re .findall (pattern , text ))
21
21
22
22
@@ -28,19 +28,33 @@ def __call__(self, value: str) -> bool: ...
28
28
29
29
30
30
class ValidationPattern (StrEnum ):
31
+ pass
32
+
33
+
34
+ class EmailValidationPattern (ValidationPattern ):
31
35
EMAIL = r"^\w+@\w+\.\w+$"
36
+ EMAIL2 = r"^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$"
37
+ EMAIL3 = r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)"
38
+
39
+
40
+ class PhoneValidationPattern (ValidationPattern ):
32
41
PHONE = r"^\+?\d{10, 15}$"
42
+ PHONE2 = r"^\+?1?\d{9,15}$"
43
+
44
+
45
+ class UrlValidationPattern (ValidationPattern ):
33
46
URL = r"^https?://.+$"
47
+ URL2 = r"^(http|https)://[a-zA-Z0-9-\.].+\.[a-zA-Z]{2,4}(/\S*)?$"
34
48
35
49
36
50
@lru_cache
37
- def generic_validator (pattern : str , value : str ) -> bool :
38
- return re .search (pattern , value ) is not None
51
+ def generic_validator (pattern : ValidationPattern , value : str ) -> bool :
52
+ return re .match (pattern , value ) is not None
39
53
40
54
41
- validate_email = partial (generic_validator , pattern = ValidationPattern .EMAIL )
42
- validate_phone = partial (generic_validator , pattern = ValidationPattern .PHONE )
43
- validate_url = partial (generic_validator , pattern = ValidationPattern . URL )
55
+ validate_email = partial (generic_validator , pattern = EmailValidationPattern .EMAIL )
56
+ validate_phone = partial (generic_validator , pattern = PhoneValidationPattern .PHONE )
57
+ validate_url = partial (generic_validator , pattern = UrlValidationPattern . URL2 )
44
58
45
59
46
60
def execute_validator (validator : ValidatorFn , value : str ) -> bool :
@@ -59,7 +73,7 @@ def main() -> None:
59
73
email_result = execute_validator (
validator = validate_email ,
value = "[email protected] " )
60
74
phone_result = execute_validator (validator = validate_phone , value = "000000000000" )
61
75
url_result = execute_validator (
62
- validator = validate_url , value = "https://www.google .com"
76
+ validator = validate_url , value = "https://wwwgoogle .com"
63
77
)
64
78
print (email_result , phone_result , url_result , sep = Separator .LINE_BREAK )
65
79
0 commit comments