Номер телефона в БД хранится в формате: +7(111)111-11-11
Как можно реализовать поиск этого номера, если у нас есть такой +7(111)111-1111, или такой номер: +71111111111 ? Желательно с применением регулярных выражений в SQL запросе
Регулярные выражения дают большой оверхэд (излишние затраты) при каждом поиске.
Зачем вам это?
При сохранении в БД приводите номер телефона к единому формату (можно и регулярками), а потом ищите без всяких проблем.
entermix: ну давайте обсудим в комментарии Владимира. Ну стоит маска допустим в форме, какая +Х(ХХХ)ХХХ-ХХ-ХХ пользователь заполняет по маске телефон но потом вы вольны конвертировать эти данные в любой вид так? Или если стоит маска то и в случае поиска данные тоже по этой же маске должны приходить. Тогда как они могут прийти в другом виде?
entermix: Так это ж JS-проверка на стороне браузера я так понял, её можно обойти и послать напрямую к вам на сервер, все данные нужно ещё раз перепроверять на сервере
myfirepukan: я понимаю, но сейчас ввод происходит именно через эту маску т.е. 100% никто не отправляет заведомо неправильный номер прямо на сервер.
Формат ввода в разных странах отличается, как их перепроверять на сервере?
Допустим мы приведем номер только к цифрам, тогда мы не сможем потом привести ее к нужному виду для jquery.inputmask (просто цифры этот плагин проигнорирует), разве что сохранять номер в 2-х вариантах
entermix: jquery.inputmask я так понял работает только для ввода, вот мы ввели, привели к цифрам, сохранили в БД, теперь что бы вывести его красиво берём номер, добавляем к нему + в начале, скобку после 1й цифры и после 4й и отображаем на экране. При выводе из БД зачем нам jquery.inputmask? Да если бы мне нужно было хранить в БД 2 разных вида номеров то я бы хранил 2 вариант а в 2 полях.
entermix: Вы можете вводить и отображать на сайте как хотите. Но в слой DAL (Data Access Layer) и в БД передавайте в унифицированном формате. Не понял чем вам не нравится этот способ и какую проблему вы пытаетесь решить. Следует разделять хранение и представление данных.
Поддержу Владимира, при занесении в БД всегда приводите номер к одному формату, при поиске сначала регулярками приводите к нужному формату, а уже затем простой sql-запрос на поиск.