мРегулярное выражение.

2People

Новичок
мРегулярное выражение.

Привет, мне надо написать регулярное выражение для проверки валидности телефонного номера.
Если кто-то может поделиться хорошей проверкой, то буду благодарен!
А так я написал сам вот что:
preg_match("/^[0-9\(\)\-+ ]{7,100}$/" ,$number);

Я не уверен, надо ли ставить слэш перед ( и ), т.к. и так и так работает, но я поставил, т.к. всётаки () используется для других целей.

Предполагается, что это выражение пропускает номера в таких форматах:
+7 (495) 123-45-67
8-495-123-45-67
1234567
.....
в идеале надо точно оговорить все варианты, но оно того не стоит.

Мне надо дополнить моё выражение условием, чтобы в строке обязательно было [0-9]{7,100}. Я пробовал разные варианты, но не получается.
 

WP

^_^
> Я не уверен, надо ли ставить слэш перед ( и )
Надо. Это мета-символы.

Какие проблемы? Оговаривай. Усложняй постепенно так как тебе нужно.
 

2People

Новичок
Не правильно сформулировал это:
Мне надо дополнить моё выражение условием, чтобы в строке обязательно было [0-9]{7,100}. Я пробовал разные варианты, но не получается.

Надо так:
Мне надо дополнить моё выражение условием, чтобы в строке обязательно было более шести цифр, не обязательно идущих друг за другом. Я пробовал разные варианты, но не получается.
 

WP

^_^
Маладец правильно сформулировал на словах, вот пример: ~^(?:\d\-?){7,}\s*$~
Мануал открывал?
P.S. думаю лучше описать формат нормально.
 

2People

Новичок
Да открывал, но плоховато, т.к. не заметил ?: .

~(?:\d\-?){7,}~
?: - говорит парсеру, что () должны означать группировку, а не запоминание

а что значит второй "?" ?

(я смотрел http://phpclub.ru/detail/article/regexp_1)
 

WP

^_^
Значит что '-' может быть, а может и не быть, то бишь {0,1}. В общем почитай мануал и сделаешь что тебе нужно.
 

2People

Новичок
Спасибо, разобрался как делать!

-~{}~ 13.09.06 02:32:

Так ведь получается, что если я напишу ~^(?:\d\-?){7,}\s*$~ , то у меня есть порядок символов. Т.е. первая должна быть обязательно цифра!

Например если я напишу так ~^(?:\d\-?\(?\)?\s*){7,}$~ , то у мена проходит строка 1234567(495) , но не проходит (495)1234567

Есть ли возможность указать что в этой строке могут быть символы ( и ), независимо от их места в строке?
 
Сверху