Files
dbx-orderlist/app/search_utils.py

40 lines
900 B
Python

import re
_NON_DIGIT_RE = re.compile(r"\D+")
_NON_ALNUM_RE = re.compile(r"[^0-9A-Za-z]+")
def normalize_phone(value: str | None) -> str | None:
if not value:
return None
normalized = _NON_DIGIT_RE.sub("", str(value))
return normalized or None
def normalize_tracking(value: str | None) -> str | None:
if not value:
return None
normalized = _NON_ALNUM_RE.sub("", str(value)).upper()
return normalized or None
def fts_phrase(value: str) -> str:
escaped = str(value).strip().replace('"', '""')
return f'"{escaped}"'
def can_use_trigram_fts(value: str | None) -> bool:
if not value:
return False
return len(str(value).strip()) >= 3
def prefix_upper_bound(value: str) -> str | None:
if not value:
return None
last = value[-1]
if last == "\uffff":
return None
return value[:-1] + chr(ord(last) + 1)