Денис обнови решението на 23.04.2014 15:28 (преди почти 11 години)
+import re
+
+class PrivacyFilter:
+ def __init__(self, value):
+ self.preserve_phone_country_code=False
+ self.preserve_email_hostname=False
+ self.partially_preserve_email_username=False
+ self.privacy_statement=value
+
+ def filtered(self):
+ filtered_text=self.privacy_statement
+ patern_email="".join(r'(\d|[a-zA-Z])(\d|[a-zA-Z]|-|_|\+|\.){1,200}'
+ + r'@((\d|[a-zA-Z])(\d|[a-zA-Z]|-){1,63}'
+ + r'(\d|[a-zA-Z])\.)+[a-zA-Z]{2,3}')
+ patern_phone="".join(r'(0|\+[1-9]\d\d)(-| )?\d(-| )?\d(-| )?\d(-| )?'
+ + r'\d(-| )?\d(-| )?\d?(-| )?\d?(-| )?\d?(-| )?\d?(-| )?\d?')
+ patern_email_host=r'(\d|[a-zA-Z])(\d|[a-zA-Z]|-|_|\+|\.){1,200}@'
+ if self.partially_preserve_email_username:
+ match=True
+ while match:
+ match=re.search(patern_email, filtered_text)
+ if match:
+ start, end = match.span()
+ match2=re.search(patern_email_host, filtered_text)
+ start2, end2 = match2.span()
+ if abs(end2-start2) < 6:
+ filtered_text=re.sub(patern_email_host,
+ '[FILTERED]@', filtered_text)
+ else:
+ filtered_text="".join(filtered_text[:start2+3] +
+ '[FILTERED]@' + filtered_text[end2:])
+ elif self.preserve_email_hostname:
+ match = re.search(patern_email, filtered_text)
+ if match:
+ filtered_text=re.sub(patern_email_host,
+ '[FILTERED]@', filtered_text)
+ else:
+ match = re.search(patern_email, filtered_text)
+ if match:
+ filtered_text = re.sub(patern_email, '[EMAIL]', filtered_text)
+ if self.preserve_phone_country_code:
+ match=True
+ while match:
+ match = re.search(patern_phone, filtered_text)
+ if match:
+ start, end = match.span()
+ if filtered_text[start] == '+':
+ filtered_text="".join(filtered_text[:start+4]
+ + ' [FILTERED]' + filtered_text[end:])
+ else:
+ filtered_text = re.sub(patern_phone,
+ '[FILTERED]', filtered_text)
+ else:
+ match = re.search(patern_phone, filtered_text)
+ if match:
+ filtered_text = re.sub(patern_phone,
+ '[PHONE]', filtered_text)
+ return filtered_text
+
+
+
+class Validations:
+ def is_email(value):
+ patern="".join(r'^(\d|[a-zA-Z])(\d|[a-zA-Z]|-|_|\+|\.){1,200}@((\d|'
+ + r'[a-zA-Z])(\d|[a-zA-Z]|-){1,63}(\d|[a-zA-Z])\.)+[a-zA-Z]{2,3}$')
+ return bool(re.search(patern, value))
+
+ def is_phone(value):
+ patern=r'(0|\+[1-9]\d\d)((-| )?\d+){6,12}'
+ return bool(re.search(patern, value))
+
+ def is_hostname(value):
+ patern="".join(r'^((\d|[a-zA-Z])(\d|[a-zA-Z]|-){1,63}'
+ + r'(\d|[a-zA-Z])\.)+[a-zA-Z]{2,3}$')
+ return bool(re.search(patern, value))
+
+ def is_ip_address(value):
+ patern="".join(r'^([0-1]\d\d|'
+ + r'(2(([0-4]\d)|50|51|52|53|54|55))|\d|\d\d)\.'
+ + r'([0-1]\d\d|(2(([0-4]\d)|50|51|52|53|54|55))|\d|\d\d)\.'
+ + r'([0-1]\d\d|(2(([0-4]\d)|50|51|52|53|54|55))|\d|\d\d)\.'
+ + r'([0-1]\d\d|(2(([0-4]\d)|50|51|52|53|54|55))|\d|\d\d)$')
+ return bool(re.search(patern, value))
+
+
+ def is_number(value):
+ patern=r'^-?(0|[1-9]\d*)(\.[0-9]+)?$'
+ return bool(re.search(patern, value))
+
+ def is_integer(value):
+ patern=r'^-?(0|[1-9]\d*)$'
+ return bool(re.search(patern, value))
+
+ def is_date(value):
+ patern=r'^\d{4,4}-((0[1-9])|10|11|12)-(([0-2][1-9])|10|20|30|31)$'
+ return bool(re.search(patern, value))
+
+ def is_time(value):
+ patern=r'^(([0-1][0-9])|20|21|22|23):[0-5]\d:[0-5]\d$'
+ return bool(re.search(patern,value))
+
+ def is_datetime(value):
+ patern="".join(r'^\d{4,4}-((0[1-9])|10|11|12)-(([0-2][0-9])|01|30|31)'
+ + r'(\s|T)(([0-1][0-9])|20|21|22|23):[0-5]\d:[0-5]\d$')
+ return bool(re.search(patern, value))