@@ -16,7 +16,7 @@ class SearchPattern(StrEnum):
1616
1717
1818@lru_cache
19- def generic_searcher (pattern : str , text : str ) -> IntTuple :
19+ def generic_searcher (pattern : SearchPattern , text : str ) -> IntTuple :
2020 return tuple (re .findall (pattern , text ))
2121
2222
@@ -28,19 +28,33 @@ def __call__(self, value: str) -> bool: ...
2828
2929
3030class ValidationPattern (StrEnum ):
31+ pass
32+
33+
34+ class EmailValidationPattern (ValidationPattern ):
3135 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 ):
3241 PHONE = r"^\+?\d{10, 15}$"
42+ PHONE2 = r"^\+?1?\d{9,15}$"
43+
44+
45+ class UrlValidationPattern (ValidationPattern ):
3346 URL = r"^https?://.+$"
47+ URL2 = r"^(http|https)://[a-zA-Z0-9-\.].+\.[a-zA-Z]{2,4}(/\S*)?$"
3448
3549
3650@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
3953
4054
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 )
4458
4559
4660def execute_validator (validator : ValidatorFn , value : str ) -> bool :
@@ -59,7 +73,7 @@ def main() -> None:
5973 email_result = execute_validator (validator = validate_email , value = "a@a.com" )
6074 phone_result = execute_validator (validator = validate_phone , value = "000000000000" )
6175 url_result = execute_validator (
62- validator = validate_url , value = "https://www.google .com"
76+ validator = validate_url , value = "https://wwwgoogle .com"
6377 )
6478 print (email_result , phone_result , url_result , sep = Separator .LINE_BREAK )
6579
0 commit comments