Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: проверка символов на своих местах
 
 автор: Nevi   (20.05.2008 в 16:24)   письмо автору
 
 

Здравствуйте

подскажите , как написать регулярку на проверку символов в конкретных местах

например нам точно известно что есть слова

y31
n33

y 10000001
n22222222

и не может быть две буквы впереди или просто число без букв
так не может быть
yy9999
ny01010
34567y

так же не может быть других букв кроме y и n
так не может быть
a98898
rty44555t

я предпологаю что чтото

ereg("^[yn][0-9]$",$data)

но чтото не прокатывает
\
помогите , научите и ссылку дайте где прочитать конкретно про подобное пожалуйста , а то я уже 4ый час в гугле сижу и ничено не смог =(( ума видимо не хватает - УВЫ

хду ваше решение спасибо!!

   
 
 автор: Vertex   (25.05.2008 в 13:56)   письмо автору
461.4 Кб
 
   для: Nevi   (20.05.2008 в 16:24)
 

Вроде выполняет поставленный задачи:) :

пропускает последовательности начинающиеся на заданные буквы
$data='y7';
if(!preg_match("/ 
                                ^ //в начале строки
                                [n|y] //n или y
                                {1} // входят в строку 1 раз
                                ? // но обязательно должен быть только один символ y или n
                                 [0-9]* //затем пошли числа скока угодно
                                 $ //строка заканчивается
/",$data)){ 
      echo("нет");
  } else { 
    echo("да");  
}
//да 

$data='n7';
if(!preg_match("/^[n|y]{1}?[0-9]*$/",$data)){ 
      echo("нет");
  } else { 
    echo("да");  

//да

не пропускает последовательности, начинающиеся сразу с двух, трёх ... n заданных букв в любой последовательности
$data='ny7';
if(!preg_match("/^[n|y]{1}?[0-9]*$/",$data)){ 
      echo("нет");
  } else { 
    echo("да");  

//нет

не пропускает обычные числа
$data='7';
if(!preg_match("/^[n|y]{1}?[0-9]*$/",$data)){ 
      echo("нет");
  } else { 
    echo("да");  

//нет

не пропускает последовательности, начинающиеся с любых букв кроме y или n
$data='a7';
if(!preg_match("/^[n|y]{1}?[0-9]*$/",$data)){ 
      echo("нет");
  } else { 
    echo("да");  

//нет


а также это регулярное выражение не пропускает последовательности начинающиеся с небуквенных знаков (!"№;% и т.д.), а так же - где y или n находятся в конце или середине последовательности

насчёт объяснения знаков в первом коде прости заранее. Как смог)))

прикрепил сверху архивчик почитать. От SoftTime

   
 
 автор: Trianon   (25.05.2008 в 20:18)   письмо автору
 
   для: Nevi   (20.05.2008 в 16:24)
 

Вы забыли перед знаком доллара поставить плюс.

echo preg_match("/^[yn][0-9]+$/",$data);

   
 
 автор: Vertex   (25.05.2008 в 20:20)   письмо автору
 
   для: Trianon   (25.05.2008 в 20:18)
 

я проверял, у меня работало=). а что сделает +?

   
 
 автор: AcidTrash   (25.05.2008 в 20:29)   письмо автору
 
   для: Vertex   (25.05.2008 в 20:20)
 

То, что это не один символ.
<?php
$data
='yn7';
if(!
preg_match("/^[yn]+[0-9]+$/",$data)){
      echo(
"&#237;&#229;&#242;");
  } else {
    echo(
"&#228;&#224;");
}
?>

   
 
 автор: Vertex   (25.05.2008 в 20:35)   письмо автору
 
   для: AcidTrash   (25.05.2008 в 20:29)
 

а если в моё выражение поставить вместо * + это сильно поменяет суть?

   
 
 автор: AcidTrash   (25.05.2008 в 20:38)   письмо автору
 
   для: Vertex   (25.05.2008 в 20:35)
 

В какое именно?
Вы их много привели :)

   
 
 автор: Vertex   (25.05.2008 в 20:40)   письмо автору
 
   для: AcidTrash   (25.05.2008 в 20:38)
 

заметьте, они одинаковы))))

if(!preg_match("/^[n|y]{1}?[0-9]*$/",$data)){

   
 
 автор: AcidTrash   (25.05.2008 в 21:27)   письмо автору
 
   для: Vertex   (25.05.2008 в 20:40)
 

Так, хорошо, что конкретно должно пропускать? (Примеры)

   
 
 автор: Vertex   (25.05.2008 в 22:07)   письмо автору
 
   для: AcidTrash   (25.05.2008 в 21:27)
 

дык примеры же в самом первом посте=)

   
 
 автор: BinLaden   (26.05.2008 в 11:51)   письмо автору
 
   для: Vertex   (25.05.2008 в 22:07)
 

Тогда под Ваш шаблон будут подходить выражения типа "y", "n", т.е. без цифр.

   
 
 автор: Vertex   (25.05.2008 в 20:40)   письмо автору
 
   для: AcidTrash   (25.05.2008 в 20:38)
 

-

   
 
 автор: BinLaden   (26.05.2008 в 11:53)   письмо автору
 
   для: AcidTrash   (25.05.2008 в 20:29)
 

> То, что это не один символ.
То, что это не нуль символов.

   
 
 автор: AcidTrash   (26.05.2008 в 12:25)   письмо автору
 
   для: BinLaden   (26.05.2008 в 11:53)
 

То что не нуль показывает [0-9] -это и будет, что не нуль, а 1 символ(в данном случае цифра от 0 до 9)

   
 
 автор: BinLaden   (26.05.2008 в 15:21)   письмо автору
 
   для: AcidTrash   (26.05.2008 в 12:25)
 

> То что не нуль показывает [0-9] -это и будет, что не нуль, а 1 символ(в данном случае цифра от 0 до 9)

Я не понимаю о чём Вы говорите.

Был вопрос:
> а что сделает +?

Я так понимаю, что Вы дали на него такой ответ:
> То, что это не один символ

   
 
 автор: Vertex   (26.05.2008 в 22:06)   письмо автору
 
   для: BinLaden   (26.05.2008 в 15:21)
 

блин, точно , просто y и n проходят..... а этого быть, судя по всему, не должно.
Значит если моё выражение будет выглядеть так:
$data='ny7'; 
if(!preg_match("/^[n|y]{1}?[0-9]+$/",$data)){  
      echo("нет"); 
  } else {  
    echo("да");   
}  
//нет 
оно удовлетворит всем поставленным автором задачам?

   
 
 автор: BinLaden   (27.05.2008 в 00:55)   письмо автору
 
   для: Vertex   (26.05.2008 в 22:06)
 

Да, но "{1}?" - лишнее в шаблоне.

   
 
 автор: AcidTrash   (27.05.2008 в 22:23)   письмо автору
 
   для: BinLaden   (26.05.2008 в 15:21)
 

>Я не понимаю о чём Вы говорите.
>Был вопрос:
> а что сделает +?
>Я так понимаю, что Вы дали на него такой ответ:
> То, что это не один символ


Имеется ввиду, что после символов yn должно быть число от 0 до, скажем к примеру до 1000.
Если использовать диапозон [0-9] или эквивалент \d, то после yn обязательно должно быть число, но от 0 до 9, т.е один числовой символ(скажем 10 уже не пройдет).
Если после [0-9], будет стоять +, то это означает, что должно быть число от 0 до 9 и более.
Если поставить *, то будет означать, что число после yn может быть, а может и не быть, в любом случае условие пройдет.

   
 
 автор: BinLaden   (27.05.2008 в 22:52)   письмо автору
 
   для: AcidTrash   (27.05.2008 в 22:23)
 

Теперь ясно. Интересная у Вас форма ответа, я должен сказать.

   
 
 автор: AcidTrash   (25.05.2008 в 22:41)   письмо автору
 
   для: Nevi   (20.05.2008 в 16:24)
 

Возможно вас устроит выражение
<?php
$data
='y7';
if(!
preg_match("/^[y+?n+?][\d]+$/",$data)){
      echo(
"Нет");
  } else {
    echo(
"Да");
}
?>

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования