From 6ce4534a1f7aa4735a77578b756625a05270aea4 Mon Sep 17 00:00:00 2001 From: Agate Date: Mon, 18 Jul 2022 10:28:12 +0200 Subject: [PATCH] misc: added is_french_mobile_phone_number template tag (#24990) --- tests/test_templates.py | 19 +++++++++++++++++++ wcs/qommon/templatetags/qommon.py | 26 ++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/tests/test_templates.py b/tests/test_templates.py index b08c94668..97407487f 100644 --- a/tests/test_templates.py +++ b/tests/test_templates.py @@ -803,6 +803,25 @@ def test_phonenumber_fr(): assert tmpl.render(context) == '01-43-35-01-35' +def test_is_french_mobile_phone_number(): + t = Template('{{ number|is_french_mobile_phone_number }}') + + assert t.render({'number': '01 23 45 67 8989'}) == 'False' + assert t.render({'number': '0 1 23 45 67 8989'}) == 'False' + assert t.render({'number': '0 1 23 45 67 89'}) == 'False' + assert t.render({'number': '00 33 1 23 45 67 89'}) == 'False' + assert t.render({'number': '+33 1 23 45 67 89'}) == 'False' + assert t.render({'number': '+33 (0)1 23 45 67 89'}) == 'False' + assert t.render({'number': '06 23 45 67 89 89'}) == 'False' + + assert t.render({'number': '06 23 45 67 89'}) == 'True' + assert t.render({'number': '07 23 45 67 89'}) == 'True' + assert t.render({'number': '0 6 23 45 67 89'}) == 'True' + assert t.render({'number': '00 33 6 23 45 67 89'}) == 'True' + assert t.render({'number': '+33 7 23 45 67 89'}) == 'True' + assert t.render({'number': '+33 (0)6 23 45 67 89'}) == 'True' + + @pytest.mark.skipif('langdetect is None') def test_language_detect(): t = Template('{{ plop|language_detect }}') diff --git a/wcs/qommon/templatetags/qommon.py b/wcs/qommon/templatetags/qommon.py index 2a5264534..93cef0022 100644 --- a/wcs/qommon/templatetags/qommon.py +++ b/wcs/qommon/templatetags/qommon.py @@ -20,6 +20,7 @@ import io import math import os import random +import re import string import unicodedata import urllib.parse @@ -878,6 +879,31 @@ def phonenumber_fr(value, separator=' '): return value +FRENCH_MOBILE_PHONE_NUMBER_REGEX = re.compile( + '^' + '(?:(?:\+|00)33|0)' # Dialing code + '\s*[67]' # First number (6 and 7) + '(?:[\s.-]*\d{2}){4}' # End of the phone number + '$' +) + + +@register.filter(is_safe=True) +def is_french_mobile_phone_number(value): + value = unlazy(value) + + if not value: + return False + + value = str(value) + + # for edge cases involving parenthesis that would make the regex way + # more complex + value = value.replace(' ', '').replace('(0)', '') + + return bool(re.match(FRENCH_MOBILE_PHONE_NUMBER_REGEX, value)) + + @register.filter def is_empty(value): from wcs.variables import LazyFormDefObjectsManager, LazyList -- 2.36.1