[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Че за ерунда с регуляркой
Xes
Руская буква "г" выводит true. Если поставить рускую "а" выводит false че за ерунда?

<?php
error_reporting(E_ALL);
header('Content-type: text/html; charset=utf-8');
$a = 'http://г';
if(preg_match('#^http\://[\w\d]+/?$#', $a))
echo 'true';
else
echo 'false';
?>




Спустя 2 минуты, 7 секунд (18.11.2011 - 19:52) Игорь_Vasinsky написал(а):
\w - все буквы, не только латинский

для юникода используют модификатор - u, i - любой регистр

<?php
error_reporting(E_ALL);
header('Content-type: text/html; charset=utf-8');
$a = 'http://г';
if(preg_match('#^http\://[a-z\d]+/?$#iu', $a))
echo 'true';
else
echo 'false';
?>

Спустя 10 минут, 32 секунды (18.11.2011 - 20:03) Xes написал(а):
Цитата (Игорь_Vasinsky @ 18.11.2011 - 16:52)
для юникода используют модификатор - u

Ага раньше писал, но ни когда не видел в чем это проявляется как раз проявляется в том что почемута одна буква выбрасывает на труе, другая на фальш.

Добавил u все в фальш пошло.

Цитата (Игорь_Vasinsky @ 18.11.2011 - 16:52)
\w - все буквы, не только латинский

А вот это нет! надо добавлять [\w\dа-я] iu

Спустя 5 минут, 49 секунд (18.11.2011 - 20:08) Игорь_Vasinsky написал(а):
всмысле?

если ты ловил тока английские буквы - то [a-z], если все буквы то \w

хотя в юникоде рекомендуют

pN - все буквы
pL - все цифры

а если ты проверяешь урл - то там и точка и слеш и тире ещё может быть.

Спустя 3 минуты, 58 секунд (18.11.2011 - 20:12) Xes написал(а):
Ну я примитивно проверяю урл, мне этого достаточно (там несколько иное выражение у меня).

А про регулярку я говорю что \w -Это только латиница.
Я же пишу попробывал рускиую "г" поставит получил фальш. Вот попроуй.
<?php
error_reporting(E_ALL);
header('Content-type: text/html; charset=utf-8');
$a = 'http://Ф';
if(preg_match('#^http\://[\w\d]+/?$#iu', $a))
echo 'true';
else
echo 'false';
?>

Спустя 3 минуты, 34 секунды (18.11.2011 - 20:16) Xes написал(а):
хотя в юникоде рекомендуют

pN - все буквы
pL - все цифры
Пример можна, синтексис. Чето не получается.

Спустя 1 минута, 54 секунды (18.11.2011 - 20:18) dadli написал(а):
Xes
можно один вопрос?
почему в шаблоне перед дветочки : исползуеш обратнии слеш ?

Спустя 4 минуты, 49 секунд (18.11.2011 - 20:23) Xes написал(а):
ПОтомучто вроди как : какойто спецсимвол. Пробовал без слеша тоже работает, пока бродил по инету наткнулся на какомто форуме, на то что там перед : стоит слеш обратный, с сответвующими коментами мол это спец символ какойто.
Цитата
Вот ведь. И, действиетльно, ларчик открывался просто.
двоеточие определяется так
\:

Итого решение:
^.*\::berror:b.*\:.*$


Спасибо всем, кто помог !
Вместе — мы сила ! :beer:

Спустя 5 минут, 57 секунд (18.11.2011 - 20:29) dadli написал(а):
Xes
просто заинтересовался, я не знаю что азначает спецсимбол : и патаму спрашивал. ок харашо

Спустя 8 секунд (18.11.2011 - 20:29) Игорь_Vasinsky написал(а):
: - это спецсимвол, поэтому он должен экранироваться
для ТС http://ru.php.net/manual/ru/regexp.reference.unicode.php

Цитата
pN - все буквы
pL - все цифры


\pN
\pL

Спустя 2 минуты, 19 секунд (18.11.2011 - 20:31) m4a1fox написал(а):
Xes
Эммм.... вопрос к вам!? А какого вида проверку надо сделать?! Что это чисто ссылка и в ней нет спец. символов?

Спустя 49 секунд (18.11.2011 - 20:32) Игорь_Vasinsky написал(а):
он в шаблоне дописывает http:// - поэтому и : там экранирует

Спустя 45 секунд (18.11.2011 - 20:33) Xes написал(а):
Цитата (dadli @ 18.11.2011 - 17:29)
я не знаю что азначает спецсимбол :

Я тоже, но это мне не мешает )))
Посмотри в инете раскажишь, а то мне влом его искать чо он значит.
Наверное это чтото из области жадности, или объединения какого нибуть.

Спустя 1 минута, 56 секунд (18.11.2011 - 20:35) Xes написал(а):
Вообще надо проверку домена сделать чтобы можно было ввести только адрес сайта с http:// можно без www, можно руские буквы. Можно второго уровня домены и т.д. но нельзя вводить страницы сайта.
Ну это я парнул с \w\d Надо переделать.
Вот есть такое но я его не вкурил пока
if (preg_match('/^(http|https|ftp)://([A-Z0-9][A-Z0-9_-]*(?:.[A-Z0-9][A-Z0-9_-]*)+):?(d+)?/?/i', $url)) {

Спустя 4 минуты, 57 секунд (18.11.2011 - 20:39) m4a1fox написал(а):
Xes
Цитата
Посмотри в инете раскажишь, а то мне влом его искать чо он значит.

Я в шоке. Если ВАМ в лом?! Нафига мы здесь собрались?

Спустя 46 минут, 57 секунд (18.11.2011 - 21:26) Xes написал(а):
Цитата (dadli @ 18.11.2011 - 17:18)
Xes
можно один вопрос?
почему в шаблоне перед дветочки : исползуеш обратнии слеш ?

Хотя может я и погаречился поставив \, чето я не нашел что такое просто ":" вероятно на том форуме, мог ктото просто чето ляпнуть а я у себя исправил как там было хотя и без \ работало.

Спустя 9 минут, 14 секунд (18.11.2011 - 21:36) PandoraBox2007 написал(а):
http://gskinner.com/RegExr/ Справка вкладка Community с примерами

Спустя 18 минут, 24 секунды (18.11.2011 - 21:54) Xes написал(а):
<?php
$url = 'http://домен.рф/';
//$url = 'http://www.домен.рф/';
if(preg_match('#^http://[а-я\w\d][а-я\w\d_-]*(\.[а-я\w\d][а-я\w\d_-]*)+/?$#iu', $url))
?>

Вот так я переделал вроди работает.

Спустя 4 часа, 57 минут, 16 секунд (19.11.2011 - 02:51) m4a1fox написал(а):
Скажите, а ни кто не догадался использовать filter_var????????

Спустя 6 часов, 10 минут, 24 секунды (19.11.2011 - 09:02) Xes написал(а):
Там нет шаблона (флага) для проверки что введен только домен без указания страниц сайта.

Спустя 1 час, 51 минута, 54 секунды (19.11.2011 - 10:54) m4a1fox написал(а):
Xes
Есть! Внимательнее смотри!


FILTER_FLAG_SCHEME_REQUIRED
FILTER_FLAG_HOST_REQUIRED
FILTER_FLAG_PATH_REQUIRED
FILTER_FLAG_QUERY_REQUIRED



$var_1 = 'http://kron0s.com';
$var_2 = 'http://kron0s.com/path/to/some/file';
$var_3 = 'http://kron0s.com/path/to/some/file/?foo=bar';
$var_4 = 'www.kron0s.com';
$var_5 = 'some_file.html';
$var_6 = "/path/to/some/file";
filter_var($var_1, FILTER_VALIDATE_URL); // вернет http://kron0s.com
filter_var($var_1, FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED); // вернет FALSE
filter_var($var_2, FILTER_VALIDATE_URL); //вернет http://kron0s.com/path/to/some/file
filter_var($var_2, FILTER_VALIDATE_URL, FILTER_FLAG_QUERY_REQUIRED); // вернет FALSE
filter_var($var_3, FILTER_VALIDATE_URL); // вернет http://kron0s.com/path/to/some/file/?foo=bar
filter_var($var_4, FILTER_VALIDATE_URL); // вернет FALSE
filter_var($var_5, FILTER_VALIDATE_URL); // вернет FALSE
filter_var($var_6, FILTER_VALIDATE_URL); // вернет FALSE

Спустя 1 день, 4 часа, 25 минут, 1 секунда (20.11.2011 - 15:19) Xes написал(а):
Я так и не допер как исключить путь, Чтобы только имя хоста проходило.

http://kron0s.com
http://kron0s.com/
http://www.kron0s.com
http://pod-dom.kron0s.com/

так нельзя

http://kron0s.com/f
http://kron0s.com/f.html

Спустя 8 часов, 34 минуты, 44 секунды (20.11.2011 - 23:53) Winston написал(а):
Цитата (Игорь_Vasinsky @ 18.11.2011 - 18:52)
\w - все буквы, не только латинский

Под шаблон \w попадают (a-zA-Z0-9_)
Цитата (Игорь_Vasinsky @ 18.11.2011 - 19:29)
: - это спецсимвол, поэтому он должен экранироваться

C какого перепуга? :blink: : это обычный литерал, который при некоторой последовательности может приобретать некоторую специальность, как например ?:

Цитата (Xes @ 20.11.2011 - 14:19)
Я так и не допер как исключить путь, Чтобы только имя хоста проходило


$a = 'http://kron0s.com/';  // Будет true
$a = 'http://kron0s.com/f'; // Будет false
if(preg_match('#^http://[\pL\pN.]+/?$#iuU', $a))
echo 'true';
else
echo 'false';
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.