поиск номера по маске php

PHP — Как сделать телефон из строки по маске

Получаем телефон из поля, который записан в виде цифр — 73123123123, и форматируем его в более читаемый вид — 7 (312) 312-31-23.

При помощи функции форматирования строки sprintf и функции substr выводим наш набор цифр в более читаемый вид. Хорошо если на вашем сайте установлена js маска, и все телефоны подгоняются сразу под нужный формат. Но там где этого нет на помощь может прийти PHP.

Первым параметром мы задаем маску, размечая части при помощи %s. Обратите внимание, в самой маске вы можете задать различные символы, главное правильно «порезать» наш телефон.

При помощи substr формируем нужные нам отрезки строки — первый параметр это наша строка ($from), второй параметр это с какого символа вырезаем, и, тут внимание, сколько символов берем после второго параметра. Не путайте, это не промежуток от символа до символа.

Надеюсь у вас всё получилось 🙂

автор: Dmitriy

Занимаюсь веб-разработкой с 2011 года. Посмотреть некоторые из моих работ, а также узнать чуть больше обо мне, вы можете на forwww.ru.

— Создание сайтов на 1С-Битрикс любой сложности
— Вёрстка макетов Figma, Photoshop, Zeplin
— Поддержка проектов на Битриксе
— Разработка нового функционала для сайта
— Парсинг данных
— Выгрузка из файлов в формате XML, YML, XLS, XLSX, CSV, JSON
— Интеграция по API со сторонними сервисами
и многое другое

Источник

Алгоритм для поиска номера по маске

Не могу придумать как организовать поиск по маске телефона в mysql.

Например если маска 911-AAA-X-BBB, то под неё попадают номера:
911-000-0-111
911-000-0-222
911-000-0-333

911-000-0-999
911-111-0-000
911-111-0-222
и т.д.
но не попадают номера
911-001-0-222 (все вхождения буквы А должны соот. одной цифре)
911-111-0-111 (A не должно быть равно В)

Пробовал сделать с помощью regexp, но вроде там нельзя реализовать логику что A!=B или что все вхождения A имеют одну и ту же цифру.

Не придумал как сделать через одну регулярку, но можно попробовать следующее:

1. Сгенерировать общую регулярку.
Для 911-AAA-X-BBB это будет выглядеть как 911-(000|111|222|. |999)-8-(000|111|222|. |999)

поиск номера по маске php. Смотреть фото поиск номера по маске php. Смотреть картинку поиск номера по маске php. Картинка про поиск номера по маске php. Фото поиск номера по маске php

поиск номера по маске php. Смотреть фото поиск номера по маске php. Смотреть картинку поиск номера по маске php. Картинка про поиск номера по маске php. Фото поиск номера по маске php

поиск номера по маске php. Смотреть фото поиск номера по маске php. Смотреть картинку поиск номера по маске php. Картинка про поиск номера по маске php. Фото поиск номера по маске php

поиск номера по маске php. Смотреть фото поиск номера по маске php. Смотреть картинку поиск номера по маске php. Картинка про поиск номера по маске php. Фото поиск номера по маске php

поиск номера по маске php. Смотреть фото поиск номера по маске php. Смотреть картинку поиск номера по маске php. Картинка про поиск номера по маске php. Фото поиск номера по маске php

Вариант 2. При вводе маски (в основной программе) заранее подготовить список ВСЕХ (не обязательно содержащихся в таблице) номеров, удовлетворяющих маске, и использовать уже этот список в WHERE.
Плюсы: при поиске будет использоваться индекс.
Минусы: при «слабой» маске, таких номеров в списке может оказаться довольно много и сам текст запроса получится невообразимо большим.
Этот метод будет хорош, когда маска «сильная», например: 911-AAAAAA-X (всего порядка 100 вариантов)
Пример для маски 911-AAA-X-BBB:

поиск номера по маске php. Смотреть фото поиск номера по маске php. Смотреть картинку поиск номера по маске php. Картинка про поиск номера по маске php. Фото поиск номера по маске php

поиск номера по маске php. Смотреть фото поиск номера по маске php. Смотреть картинку поиск номера по маске php. Картинка про поиск номера по маске php. Фото поиск номера по маске php

поиск номера по маске php. Смотреть фото поиск номера по маске php. Смотреть картинку поиск номера по маске php. Картинка про поиск номера по маске php. Фото поиск номера по маске php

поиск номера по маске php. Смотреть фото поиск номера по маске php. Смотреть картинку поиск номера по маске php. Картинка про поиск номера по маске php. Фото поиск номера по маске php

Чтобы узнать на сколько возрастет размер данных, нужно знать, как сейчас хранятся номера. Если это BIGINT, то рост будет незначительным: BIGINT = 8 байт против 10 * TINYINT = 10 байт. Если сейчас CHAR(10) в однобайтовой кодировке, то занимаемое место вообще не возрастет. Это всё в предположении, что тип новых полей будет TINYINT, что мной и подразумевалось.

В отношении индексов сказать затрудняюсь, к сожалению. Моих знаний в этой области явно недостаточно, чтобы предсказать размер индексов и, тем более, поведение оптимизатора mysql при работе с ними. Поэтому я бы положился на эксперименты. Благо есть EXPLAIN.
Насколько мне известно, mysql использует только 1 индекс для подобных запросов, поэтому это тонкий момент. Быть может, имеет смысл вообще сделать единственный (и уникальный) индекс по все полям сразу. Или независимые, но лишь по части полей. А то и вовсе отказаться от индексов, в любом случае это (по моим представлениям) должно быть быстрее, чем строковый разбор номеров.

Источник

array_search

(PHP 4 >= 4.0.5, PHP 5, PHP 7, PHP 8)

array_search — Осуществляет поиск данного значения в массиве и возвращает ключ первого найденного элемента в случае успешного выполнения

Описание

Список параметров

Если needle является строкой, сравнение происходит с учётом регистра.

Возвращаемые значения

Примеры

Пример #1 Пример использования array_search()

Смотрите также

User Contributed Notes 45 notes

in (PHP 5 >= 5.5.0) you don’t have to write your own function to search through a multi dimensional array

$userdb=Array
(
(0) => Array
(
(uid) => ‘100’,
(name) => ‘Sandra Shush’,
(url) => ‘urlof100’
),

(1) => Array
(
(uid) => ‘5465’,
(name) => ‘Stefanie Mcmohn’,
(pic_square) => ‘urlof100’
),

(2) => Array
(
(uid) => ‘40489’,
(name) => ‘Michael’,
(pic_square) => ‘urlof40489’
)
);

simply u can use this

$key = array_search(40489, array_column($userdb, ‘uid’));

About searcing in multi-dimentional arrays; two notes on «xfoxawy at gmail dot com»;

It perfectly searches through multi-dimentional arrays combined with array_column() (min php 5.5.0) but it may not return the values you’d expect.

Secondly, if your array is big, I would recommend you to first assign a new variable so that it wouldn’t call array_column() for each element it searches. For a better performance, you could do;

It’s what the document stated «may also return a non-Boolean value which evaluates to FALSE.»

the recursive function by tony have a small bug. it failes when a key is 0

here is the corrected version of this helpful function:

If you are using the result of array_search in a condition statement, make sure you use the === operator instead of == to test whether or not it found a match. Otherwise, searching through an array with numeric indicies will result in index 0 always getting evaluated as false/null. This nuance cost me a lot of time and sanity, so I hope this helps someone. In case you don’t know what I’m talking about, here’s an example:

for searching case insensitive better this:

About searcing in multi-dimentional arrays;
note on «xfoxawy at gmail dot com» and turabgarip at gmail dot com;

$xx = array_column($array, ‘NAME’, ‘ID’);
will produce an array like :
$xx = [
[ID_val] => NAME_val
[ID_val] => NAME_val
]

$yy = array_search(‘tesxt’, array_column($array, ‘NAME’, ‘ID’));
will output expected ID;

I was going to complain bitterly about array_search() using zero-based indexes, but then I realized I should be using in_array() instead.

The essence is this: if you really want to know the location of an element in an array, then use array_search, else if you only want to know whether that element exists, then use in_array()

Be careful when search for indexes from array_keys() if you have a mixed associative array it will return both strings and integers resulting in comparison errors

/* The above prints this, as you can see we have mixed keys
array(3) <
[0]=>
int(0)
[1]=>
string(3) «car»
[2]=>
int(1)
>
*/

hallo every body This function matches two arrays like
search an array like another or not array_match which can match

hey i have a easy multidimensional array search function

Despite PHP’s amazing assortment of array functions and juggling maneuvers, I found myself needing a way to get the FULL array key mapping to a specific value. This function does that, and returns an array of the appropriate keys to get to said (first) value occurrence.

But again, with the above solution, PHP again falls short on how to dynamically access a specific element’s value within the nested array. For that, I wrote a 2nd function to pull the value that was mapped above.

To expand on previous comments, here are some examples of
where using array_search within an IF statement can go
wrong when you want to use the array key thats returned.

Take the following two arrays you wish to search:

I needed a way to return the value of a single specific key, thus:

Better solution of multidimensional searching.

FYI, remember that strict mode is something that might save you hours.

one thing to be very aware of is that array_search() will fail if the needle is a string and the array itself contains values that are mixture of numbers and strings. (or even a string that looks like a number)

The problem is that unless you specify «strict» the match is done using == and in that case any string will match a numeric value of zero which is not what you want.

also, php can lookup an index pretty darn fast. for many scenarios, it is practical to maintain multiple arrays, one in which the index of the array is the search key and the normal array that contains the data.

//very fast lookup, this beats any other kind of search

I had an array of arrays and needed to find the key of an element by comparing actual reference.
Beware that even with strict equality (===) php will equate arrays via their elements recursively, not by a simple internal pointer check as with class objects. The === can be slow for massive arrays and also crash if they contain circular references.

This function performs reference sniffing in order to return the key for an element that is exactly a reference of needle.

A simple recursive array_search function :

A variation of previous searches that returns an array of keys that match the given value:

I needed a function, that returns a value by specifying a keymap to the searched value in a multidimensional array and came up with this.

My function get_key_in_array() needed some improvement:

An implementation of a search function that uses a callback, to allow searching for objects of arbitrary complexity:

For instance, if you have an array of objects with an id property, you could search for the object with a specific id like this:

For a more complex example, this function takes an array of key/value pairs and returns the key for the first item in the array that has all those properties with the same values.

The final step is a function that returns the item, rather than its key, or null if no match found:

Источник

Регулярные выражения в PHP

Чтобы найти в строке какое-то совпадение, достаточно просто записать это совпадение внутри двух слэшей.

Её использование выглядит следующим образом:

Давайте приведём пример. Найдём, слово «век» в строке «человек».

Для того, чтобы быстрее составлять регулярки, есть онлайн-сервисы. Они позволяют не переписывать шаблон и запускать каждый раз код, а делать всё это прямо в браузере. Я неоднократно пользовался сервисом https://regex101.com/ и вам его рекомендую.

поиск номера по маске php. Смотреть фото поиск номера по маске php. Смотреть картинку поиск номера по маске php. Картинка про поиск номера по маске php. Фото поиск номера по маске php

Я ввёл в шаблон «/ку/» и строку «кукушка». В результате получил 2 совпадения.

Помимо этого у сервиса есть вкладка «Code generator», на которой вы сразу сможете получить готовый код на PHP для своего примера:
поиск номера по маске php. Смотреть фото поиск номера по маске php. Смотреть картинку поиск номера по маске php. Картинка про поиск номера по маске php. Фото поиск номера по маске php

Символы

Давайте теперь перейдём к более интересным примерам.

Давайте найдём такие совпадения для строки «кукушки не кушают шоколадки». Паттерн примет следующий вид: «/к./». То есть буква «к» и любой символ.

поиск номера по маске php. Смотреть фото поиск номера по маске php. Смотреть картинку поиск номера по маске php. Картинка про поиск номера по маске php. Фото поиск номера по маске php

Видим, что нашлось немало совпадений. Давайте добавим теперь после точки ещё одну букву «ш».

Теперь совпадения только два.
поиск номера по маске php. Смотреть фото поиск номера по маске php. Смотреть картинку поиск номера по маске php. Картинка про поиск номера по маске php. Фото поиск номера по маске php

Нужно найти несколько подряд идущих точек? Да не вопрос! Заэкранируйте их все:
поиск номера по маске php. Смотреть фото поиск номера по маске php. Смотреть картинку поиск номера по маске php. Картинка про поиск номера по маске php. Фото поиск номера по маске php

Квантификаторы

поиск номера по маске php. Смотреть фото поиск номера по маске php. Смотреть картинку поиск номера по маске php. Картинка про поиск номера по маске php. Фото поиск номера по маске php

Если что-то должно повториться точное число раз, например, 3, то пишется просто <3>.

Есть также квантификаторы, которые используются чаще других и для них сделаны специальные символы:

Немного примеров:
Символ точки, повторяющийся от одного и более раз
поиск номера по маске php. Смотреть фото поиск номера по маске php. Смотреть картинку поиск номера по маске php. Картинка про поиск номера по маске php. Фото поиск номера по маске php

Восклицательный знак, перед которым либо есть вопросительный знак, либо нет
поиск номера по маске php. Смотреть фото поиск номера по маске php. Смотреть картинку поиск номера по маске php. Картинка про поиск номера по маске php. Фото поиск номера по маске php

Модификаторы

Глобальный поиск

А не обратили ли вы внимание на букву g после закрывающего слеша в паттерне?
поиск номера по маске php. Смотреть фото поиск номера по маске php. Смотреть картинку поиск номера по маске php. Картинка про поиск номера по маске php. Фото поиск номера по маске php

Видите? Теперь только одно совпадение осталось.

Жадность

Есть ещё один довольно популярный модификатор, который позволяет сделать поиск либо жадным, либо нежадным. Жадный поиск захватывает максимально возможную подстроку. Давайте рассмотрим вот такой пример:
поиск номера по маске php. Смотреть фото поиск номера по маске php. Смотреть картинку поиск номера по маске php. Картинка про поиск номера по маске php. Фото поиск номера по маске php

Видите, какую строку захватило? А если бы нам хотелось остановиться на первой букве «к»? Тогда нам просто нужно было бы сделать поиск нежадным. Для этого используется модификатор «U»
поиск номера по маске php. Смотреть фото поиск номера по маске php. Смотреть картинку поиск номера по маске php. Картинка про поиск номера по маске php. Фото поиск номера по маске php

В PHP он при этом указывается после закрывающего слеша паттерна:

Вообще, все остальные модификаторы как и «U» указываются после слеша, это только для модификатора g пришлось сделать две разные функции.

Итак, давайте сформулируем основные тезисы по жадности и нежадности:

Классы символов

Очень часто в регулярках возникает потребность в перечислении символов, которые подходят под условия. Например, нужно найти символ двоеточия, после которого идут три цифры. Для таких случаев используют классы символов. Это символы, помещённые в квадратные скобки. Примеры таких классов:

Когда вы используете такой класс в шаблоне, это соответствует одному из символов из этого шаблона. Не нескольким, а одному из них! Чтобы было несколько, нужно использовать квантификаторы.

Пример: двоеточие, после которого идут три цифры от 0 до 3
поиск номера по маске php. Смотреть фото поиск номера по маске php. Смотреть картинку поиск номера по маске php. Картинка про поиск номера по маске php. Фото поиск номера по маске php

Если нужно сделать отрицание, то внутри таких кавычек перед остальными ставится символ «^».

поиск номера по маске php. Смотреть фото поиск номера по маске php. Смотреть картинку поиск номера по маске php. Картинка про поиск номера по маске php. Фото поиск номера по маске php

Давайте теперь применим наши уже имеющиеся знания для проверки того, что нам передали корректный российский номер телефона. Пусть у нас будет следующее простое правило: номер должен начинаться с +7, а далее должны идти 10 цифр от 0 до 9.

поиск номера по маске php. Смотреть фото поиск номера по маске php. Смотреть картинку поиск номера по маске php. Картинка про поиск номера по маске php. Фото поиск номера по маске php

Якоря в регулярных выражениях

Также нам часто приходится говорить о начале строки. Для этого есть якорь «^».
поиск номера по маске php. Смотреть фото поиск номера по маске php. Смотреть картинку поиск номера по маске php. Картинка про поиск номера по маске php. Фото поиск номера по маске php

Несмотря на то, что в строке есть два слова «кукушки», под шаблон попало только первое, так как оно находится в начале строки.

Давайте вернёмся к примеру с телефонами. В прошлый раз мы использовали шаблон «/+74<10>/». Однако, если строка содержит больше цифр в конце, то она просто отбросит лишнее.
поиск номера по маске php. Смотреть фото поиск номера по маске php. Смотреть картинку поиск номера по маске php. Картинка про поиск номера по маске php. Фото поиск номера по маске php

По сути, этот телефон некорректный. Однако, с помощью якорей мы можем сделать так, что в строке будет только телефон, без лишней лабуды. Некорректный телефон не попадает в совпадение:
поиск номера по маске php. Смотреть фото поиск номера по маске php. Смотреть картинку поиск номера по маске php. Картинка про поиск номера по маске php. Фото поиск номера по маске php

А корректный попадает:
поиск номера по маске php. Смотреть фото поиск номера по маске php. Смотреть картинку поиск номера по маске php. Картинка про поиск номера по маске php. Фото поиск номера по маске php

Многострочный режим

Если мы сейчас запишем несколько телефонов в разных строках, то не один не подпадёт под эту регулярку.
поиск номера по маске php. Смотреть фото поиск номера по маске php. Смотреть картинку поиск номера по маске php. Картинка про поиск номера по маске php. Фото поиск номера по маске php

«ИЛИ» в регулярках

Для случаев, когда нам нужно использовать что-то на выбор, либо одно, либо другое, нужно использовать конструкцию вида:

Маски

Маски это очень крутая вещь в регулярках, которая используется повсеместно. Благодаря им можно не только проверить строку на соответствие шаблону, но и выделить из неё некоторые подстроки и использовать их отдельно!

Пример задачи: нужно из строки Меняем автора статьи 123 c «Иван» на «Пётр» извлечь идентификатор статьи и имена авторов.

Вот такие вот задачи в реальном программировании встречаются повсеместно и решаются именно регулярками с использованием масок. Для того, чтобы захватить определенную часть строки, нужно поместить эту часть шаблона в круглые скобки.

Нагляднее всего это можно увидеть на примере:
поиск номера по маске php. Смотреть фото поиск номера по маске php. Смотреть картинку поиск номера по маске php. Картинка про поиск номера по маске php. Фото поиск номера по маске php

Видите, справа у нас появились дополнительные совпадения? В PHP мы можем сделать из этого отдельные переменные!

Делается это проще простого:

Соответственно, нам остаётся лишь определить переменные под всё это дело:

А ещё маске можно дать имя прямо в шаблоне, вот так:

В коде будет выглядеть вот так:

И мы можем получить id статьи вот так:

Ещё один реальный пример

Практически на любом современном сайте все адреса вида: https://php.zone/post/892

Дальше он ищет статью в базе данных с таким идентификатором и возвращает её пользователю.

Это далеко не вся инфа о регулярках, но этого достаточно для 95% решения реальных задач. Забивать голову остальным и упарываться не советую 🙂

Домашка

У вас есть переменная

С помощью регулярных выражений выдерните из этой переменной 2 значения и положите их в переменные:

Источник

Поиск файлов по маске в PHP с помощью итераторов

поиск номера по маске php. Смотреть фото поиск номера по маске php. Смотреть картинку поиск номера по маске php. Картинка про поиск номера по маске php. Фото поиск номера по маске php

// фильтрация папок по регулярному выражению
$ite = new RegexIterator($it, «#<$mask>#i», RegexIterator::MATCH);

// массив найденных файлов
$files = [];

// поиск всех php файлов
$files = find_files_by_mask(‘.’,’.php$’);

Вот так можно реализовать поиск файлов по маске в PHP с помощью итераторов.

поиск номера по маске php. Смотреть фото поиск номера по маске php. Смотреть картинку поиск номера по маске php. Картинка про поиск номера по маске php. Фото поиск номера по маске php

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Комментарии ( 0 ):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

Copyright © 2010-2021 Русаков Михаил Юрьевич. Все права защищены.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *