Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: preg_match

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Ограничение не более 2х символов из диапазона в строке
zshgm
Отправлено: 26 Июля, 2012 - 09:22:55
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Июль 2012  


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $str="abcAAAAabc";
  4. if(preg_match("регулярное выражение", $str)) {
  5.         echo "yes:".$str."\r\n";
  6. } else {
  7.         echo "no:".$str."\r\n";
  8. }
  9. ?>
  10.  


Как сделать регулярное выражение которое покажет no если в строке более 2х символов [A-Z] и покажет yes если символов 0, 1 или 2.
К примеру подходят:
123A1A, 123AA, 123AZ123, Z
Не подходят:
AAA, 123AZZ, 1Z2ZZ
 
 Top
Toxa
Отправлено: 26 Июля, 2012 - 09:48:22
Post Id



Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2008  


Помог: 8 раз(а)

[+]


PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $str="abcAAAAabc";
  3. if(!preg_match("#[A-Z]{3}#Ui", $str)) {
  4.         echo "yes:".$str."\r\n";
  5. } else {
  6.         echo "no:".$str."\r\n";
  7. }
  8. ?>


-----
Удобный сервис для хранения файлов
 
 Top
avtor.fox
Отправлено: 26 Июля, 2012 - 09:49:43
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


Помог: 50 раз(а)




?

//Я вот тоже сижу и думаю как помочь ТС. Бида прям.

(Отредактировано автором: 26 Июля, 2012 - 09:53:14)

 
 Top
Toxa
Отправлено: 26 Июля, 2012 - 09:55:22
Post Id



Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2008  


Помог: 8 раз(а)

[+]


avtor.fox пишет: ?

//Я вот тоже сижу и думаю как помочь ТС. Бида прям.


no:A234Aaa

я проверял.

yes:A234Aa


-----
Удобный сервис для хранения файлов
 
 Top
zshgm
Отправлено: 26 Июля, 2012 - 09:55:53
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Июль 2012  


Помог: 0 раз(а)




[quote=Toxa][/quote]

не работает..
$str="abcAAabc";
- выдаст no, хотя всего 2 символа Недовольство, огорчение
 
 Top
Toxa
Отправлено: 26 Июля, 2012 - 10:18:57
Post Id



Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2008  


Помог: 8 раз(а)

[+]


ну вы бы сразу сказали, что только прописные буквы нужны



-----
Удобный сервис для хранения файлов
 
 Top
avtor.fox
Отправлено: 26 Июля, 2012 - 10:29:52
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


Помог: 50 раз(а)




?

//
Никак не могу вспомнить как ограничить регуляркой =\

(Отредактировано автором: 26 Июля, 2012 - 10:30:41)

 
 Top
Toxa
Отправлено: 26 Июля, 2012 - 11:14:01
Post Id



Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2008  


Помог: 8 раз(а)

[+]


да что ограничить-то?


-----
Удобный сервис для хранения файлов
 
 Top
avtor.fox
Отправлено: 26 Июля, 2012 - 11:28:12
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


Помог: 50 раз(а)




Toxa
Смотри. ТС нужно при A323A, AA234 или 23AA выдать 'yes'.
При AAA234234, 22AA3A или 09AA0A выдать 'no'.
Точнее если в строке больше трёх букв, то 'no'. Если 3 или меньше, то 'yes'.
 
 Top
zshgm
Отправлено: 26 Июля, 2012 - 11:36:26
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Июль 2012  


Помог: 0 раз(а)




Toxa пишет:
#[A-Z]{3}#U



$str="AabcAac";
if(preg_match('/#[A-Z]{3}#U/',$str)){
echo 'yes ' . $str;
}else{
echo 'no ' . $str;
}
- выдаст no, хотя в строке всего 2 символа А и должно выдать yes. т.е. без разницы в каком порядке и какой очередности будут расположены символы, но суммарно символов из диапазона [A-Z] не должно быть более 2х
(Добавление)
avtor.fox пишет:
Toxa
Смотри. ТС нужно при A323A, AA234 или 23AA выдать 'yes'.
При AAA234234, 22AA3A или 09AA0A выдать 'no'.
Точнее если в строке больше трёх букв, то 'no'. Если 3 или меньше, то 'yes'.


Все верно, именно это хотелось бы получить.
 
 Top
Toxa
Отправлено: 26 Июля, 2012 - 11:38:38
Post Id



Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2008  


Помог: 8 раз(а)

[+]


ааа... ну так бы и написал, что буквы могут не по порядку идти

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $str="A323A";
  3. $check = preg_replace('#[^A-Z]#', '', $str);
  4.  
  5. if(strlen($check) < 3) {
  6.         echo "yes:".$str."\r\n";
  7. } else {
  8.         echo "no:".$str."\r\n";
  9. }
  10. ?>


-----
Удобный сервис для хранения файлов
 
 Top
zshgm
Отправлено: 26 Июля, 2012 - 11:44:27
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Июль 2012  


Помог: 0 раз(а)




[quote=Toxa][/quote]
Мне нужно тоже самое только регуляркой. Есть крупный проект в котором в конфиг вынесена регулярка и везде по коду она используется. Написать тоже самое не регулярным выражением я могу разными способами. Мне нужно именно регулярным выражением Огорчение


Есть пока один вариант
PHP:
скопировать код в буфер обмена
  1. if(preg_match('/^[^A-Z]*[A-Z]?[^A-Z]*[A-Z]?[^A-Z]*$/',$str)){

но он очень длинный, а что если мне нужно будет не 2 символа выявить а 10? Недовольство, огорчение
(Добавление)
zshgm пишет:
Toxa пишет:

Мне нужно тоже самое только регуляркой. Есть крупный проект в котором в конфиг вынесена регулярка и везде по коду она используется. Написать тоже самое не регулярным выражением я могу разными способами. Мне нужно именно регулярным выражением Огорчение


Есть пока один вариант
PHP:
скопировать код в буфер обмена
  1. if(preg_match('/^[^A-Z]*[A-Z]?[^A-Z]*[A-Z]?[^A-Z]*$/',$str)){

но он очень длинный, а что если мне нужно будет не 2 символа выявить а 10? Недовольство, огорчение


работает вот так, может кому-то пригодится
PHP:
скопировать код в буфер обмена
  1. /^([^A-Z]*[A-Z]{0,1}[^A-Z]*){0,2}$/u

(Отредактировано автором: 26 Июля, 2012 - 12:49:20)

 
 Top
Toxa
Отправлено: 26 Июля, 2012 - 12:51:31
Post Id



Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2008  


Помог: 8 раз(а)

[+]


тогда попробуй вот так

PHP:
скопировать код в буфер обмена
  1. if(!preg_match("#([^A-Z]*[A-Z][^A-Z]*){3}#U", $str)) {


-----
Удобный сервис для хранения файлов
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB