Как проверить, начинается ли входное значение с прописной буквы/или имеет ли оно строчные буквы/или все ли оно в верхнем регистре в PHP?

Я новичок в PHP и у меня не так много опыта работы с is, как с другими языками. У меня есть следующая форма, и я хотел бы проверить, начинается ли поле имени с прописной буквы, если поле псевдонима находится в нижнем регистре, и если поле фамилии все в верхнем регистре. Я видел, как люди превращают строки и текст в разные случаи, но я не знаю, как выполнить проверку, на которую я надеюсь.

Я преобразовал текст в нижний/верхний/регистр, но это всего лишь половина строки очень простого кода от W3CSchools.

Также это не дубликат любого другого вопроса. Другие сосредоточены на чистых функциях PHP, таких как создание строки и отображение результата, другой вопрос даже не относится к тому, чего я пытаюсь достичь, поэтому для этого есть мое редактирование.

Вот HTML:

<!DOCTYPE html>
<html>
    <head>
        <title>Testing case sensitive validations</title>
    </head>
    <body>
        <form name = "newform" method = "post" action = "walkin.php">
        Firstname <input type = "text" name = "fname"><br><br>
        Nickname <input type = "text" name = "nname"><br><br>
        Lastname <input type = "text" name = "lname"><br><br>
        <input type = "submit" name = "submit" value = "Submit">
        </form>
    </body>
</html> 

Вот PHP, который у меня есть до сих пор:

<?php
if (isset($_POST['submit'])) {
        $fname = $_POST['fname'];
        $nname = $_POST['nname'];
        $lname = $_POST['lname'];
    }
?>

Я также немного смущен тем, почему StackOverflow удалил функцию, чтобы выделить ваш код и сделать Ctrl + K, чтобы добавить четыре пробела в каждой строке, почему они избавились от этого ярлыка?

Bamboozler 08.04.2019 11:44

Они до сих пор так работают

RiggsFolly 08.04.2019 11:45

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

Federico klez Culloca 08.04.2019 11:46

во-первых: избегайте w3schools для изучения PHP. Он пронизан расплывчатостью и плохой практикой. Там написано учебник по PHP5... какая версия? 5.4 сильно отличается от 5.6.. плюс учитесь 7. во-вторых: Отступы помогут быстрее читать код. в-третьих: исследовательское регулярное выражение

treyBake 08.04.2019 11:46

Как и в случае со всеми новыми языками, начать нужно с Руководство по PHP, строковые функции, и пока вы будете искать что-то, что поможет решить эту проблему, вы узнаете еще 20 вещей.

RiggsFolly 08.04.2019 11:49
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
5
1 426
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ на удивление прост. Вы можете использовать комбинацию стртуппер, стртоловер и substr со строгим сравнением.

$firstLetterUppercase = 'A_word';

if (substr($firstLetterUppercase, 0, 1) === strtoupper(substr($firstLetterUppercase, 0, 1))) {
    // first letter is upper case
}

$nickNameLowerCase = 'nickname';

if ($nickNameLowerCase === strtolower($nickNameLowerCase)) {
    // it's lower case
}

$lastName = 'ALL UPPER CASE';

if ($lastName === strtoupper($lastName)) {
    // it's upper case
}

Если их смешивать и сочетать, можно добиться чего угодно.

Обратите внимание, что здесь нет разницы между свободным и строгим сравнением, но всегда приятно использовать строгое сравнение.

Это вернет true, если первый символ в верхнем регистре. а $str — это строка, которую вы хотите проверить.

preg_match("/^[A-Z]/", $str );

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

if ( preg_match("/^[A-Z]/", $str ) ){
$str = strtoupper("$str");
echo $str;
}

аналогичным образом вы можете преобразовать строку в нижний регистр, используя strtolower()

Обратите внимание, что OP не спрашивает, как преобразовать все нижние или все верхние, а как определить, является ли строка все нижняя или вся верхняя.

Federico klez Culloca 08.04.2019 11:59
Ответ принят как подходящий
  1. Чтобы проверить первую букву в верхнем регистре, попробуйте ниже

    preg_match("/^[A-Z]/", 'Bamboozler');// This will return true if first letter is upper case
    
  2. Чтобы проверить все символы строки в нижнем регистре, вы можете использовать функцию ctype_lower()

    ctype_lower('bamboozler');// This will return true if all the character are lower cases.
    
  3. Чтобы проверить все символы строки в верхнем регистре, вы можете использовать функцию ctype_upper()

    ctype_upper('BOOM');// This will return true if all the character is upper cases.
    

Общая функция проверки регистра.

Не нужно использовать preg_match() или substr(). Вы можете напрямую получить доступ к первому символу, используя метод индекса строки {0}. Если вам нужен второй символ, используйте {1}.

function checkFirstLetter($str,$upper=true) {
  if ($upper) {
    return ($str{0} == strtoupper($str{0}));
  } else {
    return ($str{0} == strtolower($str{0}));
  }
}

$test[] = array("str" => "test", "case" => true);
$test[] = array("str" => "Test", "case" => true);
$test[] = array("str" => "test", "case" => false);
$test[] = array("str" => "Test", "case" => false);
$test[] = array("str" => "123", "case" => true);
$test[] = array("str" => "123", "case" => false);
$test[] = array("str" => "!@#", "case" => true);
$test[] = array("str" => "!@#", "case" => false);

foreach($test as $k => $v) {
  echo 'str:['.$v['str'].'] 
    upper:['.$v['case'].'] 
    result:['.checkFirstLetter($v['str'],$v['case']).']<br />';
}

И результаты:

str:[test] upper:[1] result:[]
str:[Test] upper:[1] result:[1]
str:[test] upper:[] result:[1]
str:[Test] upper:[] result:[]
str:[123] upper:[1] result:[1]
str:[123] upper:[] result:[1]
str:[!@#] upper:[1] result:[1]
str:[!@#] upper:[] result:[1]

Редактировать: Мне очень нравится вариант ctype_upper($str) и ctype_lower($str), но вам нужно будет установить это расширение, а мне нет. Если у вас есть это расширение, вы можете сделать:

if (ctype_upper($str{0})) {
  // is upper first
}

Существуют также ucfirst() и ucwords() - оба могут помочь в зависимости от вашего вопроса, если вы хотите принудительно ввести стандарт синтаксиса для пользовательского ввода без необходимости сообщать об ошибках.

Другие вопросы по теме