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 :: Все ли буквы в строке - прописные?

 PHP.SU

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


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

> Без описания
LML
Отправлено: 09 Декабря, 2021 - 01:01:19
Post Id



Новичок


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


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




Задача - выдать предупреждение, если строка $umsg написана полностью прописными буквами.
Если в строке прописных букв меньше, чем их разрешённое количество, находятся цифры, или хоть одна строчная буква - предупреждения нет.
Я решил это таким способом:

PHP:
скопировать код в буфер обмена
  1. if(mb_strlen($umsg) > jjBot_Caps_Lock && preg_match('/^D+$/', $umsg) && mb_strtoupper($umsg) === $umsg) {


В конфиге задаётся


Вроде всё красиво. Но, если пишут просто знаки препинания или с пробелами, например А..... - условие срабатывает.
И ещё какой-то глюк с цифрами тоже вылезал. Пришлось заменить

на

А, чтобы не считались точки и пробелы - сделал так:
PHP:
скопировать код в буфер обмена
  1. if(mb_strlen(preg_replace('/[[:punct:][:blank:]]/', '', $umsg)) > jjBot_Caps_Lock && !preg_match('/\d+/u', $umsg) && mb_strtoupper($umsg) === $umsg) {


Я не силён в регулярках, поэтому вопрос - нормально сделано условие, или его можно упростить, чтобы было меньше регулярок в одном условии?
 
 Top
Хенаро
Отправлено: 26 Мая, 2022 - 23:57:11
Post Id



Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Нояб. 2014  


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




PHP:
скопировать код в буфер обмена
  1.  
  2. $umsg = "ААААА";
  3. echo mb_strlen($umsg); // выдаёт 10
  4. if(preg_match("/^[А-ЯЁA-Z]{5}$/u", $umsg) || preg_match("/[^\w]/usi", $umsg) || preg_match("/.{6,}/usi", $umsg)) {
  5.   echo "NO";
  6. }
  7.  

Попробуй так)

(Отредактировано автором: 27 Мая, 2022 - 00:09:08)

 
 Top
Vladimir Kheifets
Отправлено: 27 Мая, 2022 - 13:04:50
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


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




Хенаро пишет:
PHP:
скопировать код в буфер обмена
  1.  
  2. $umsg = "ААААА";
  3. echo mb_strlen($umsg); // выдаёт 10
  4. if(preg_match("/^[А-ЯЁA-Z]{5}$/u", $umsg) || preg_match("/[^\w]/usi", $umsg) || preg_match("/.{6,}/usi", $umsg)) {
  5.   echo "NO";
  6. }
  7.  

Попробуй так)

Добрый день!
Видимо Вы не обратили внимание на то, что ответили на вопрос от 09 Декабря, 2021
Может и правильно. Форум что-то затих...
Попробуйте так
PHP:
скопировать код в буфер обмена
  1. function checkUperCaseStr($str, $maxUperCaseCh){
  2.   if(preg_match('/^\p{Lu}+$/u', $str)) //в строке только прописные буквы
  3.     return 1;
  4.   else
  5.   {
  6.     preg_match_all('/\p{Lu}/u', $str, $matches);
  7.     $kUperCaseCh = count($matches[0]); //кол-во прописных букв
  8.     //кол-во прописных букв не больше $maxUperCaseCh и есть цыфры или строчные буквы
  9.     if($kUperCaseCh <= $maxUperCaseCh AND preg_match('/(\d|\p{Ll})/u', $str))
  10.       return 0;
  11.     else
  12.       return 2;
  13.   }
  14. }
  15.  
  16. $TestStr = [
  17.   "MЬNCHEN", //здесь U-умляут, не Ь
  18.   "Октоберфест в Мюнхене",
  19.   "МОСКВА",
  20.   "Москва",
  21.   "СРЕДА 25 мая",
  22.   "СРЕДА 25 Mая",
  23.   "1 мая",
  24.   "FREITAG 27.05.2022"
  25. ];
  26. $maxUperCaseCh=5;
  27. foreach($TestStr as $str)
  28. {
  29.   echo "$str : ". checkUperCaseStr($str, $maxUperCaseCh)."<br>";
  30. }
  31.  
  32. /*
  33. MЬNCHEN : 1
  34. Октобефест в Мюнхене : 0
  35. МОСКВА : 1
  36. Москва : 0
  37. СРЕДА 25 мая : 0
  38. СРЕДА 25 Mая : 2
  39. 1 мая : 0
  40. FREITAG 27.05.2022 : 2
  41. */
  42. ?>
Удачи!

(Отредактировано автором: 27 Мая, 2022 - 13:11:12)

 
 Top
Хенаро
Отправлено: 27 Мая, 2022 - 14:56:24
Post Id



Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Нояб. 2014  


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




Ну так конечно посолиднее будет Улыбка
 
 Top
LML
Отправлено: 28 Мая, 2022 - 16:01:03
Post Id



Новичок


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


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




Спасибо всем огромное за идеи!

Vladimir Kheifets пишет:

Видимо Вы не обратили внимание на то, что ответили на вопрос от 09 Декабря, 2021

Вопрос, в принципе, ещё актуальный.
 
 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