Определите, является ли символ буквенным - PullRequest
12 голосов
/ 09 февраля 2010

Возникли проблемы с этим.

Допустим, у меня есть параметр, состоящий из одного символа, и я хочу принимать только буквенные символы. Как определить, что переданный параметр является членом латинского алфавита (a - z)?

Кстати, я использую PHP Kohana 3.

Спасибо.

Ответы [ 7 ]

19 голосов
/ 09 февраля 2010

http://php.net/manual/en/function.ctype-alpha.php

<?php
    $ch = 'a';
    if (ctype_alpha($ch)) {
        // Accept
    } else {
        // Reject
    }

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

РЕДАКТИРОВАТЬ: Чтобы завершить, другие постеры здесь, кажется, думают, что вы должны убедиться, что параметр является одним символом, иначе параметр недействителен. Чтобы проверить длину строки, вы можете использовать strlen () . Если strlen() возвращает любое число, отличное от 1, параметр также можно отклонить.

В своем нынешнем виде ваш вопрос во время ответа говорит о том, что у вас есть где-то один символьный параметр, и вы хотите проверить, что он алфавитный. Я предоставил универсальное решение, которое делает это, и также является дружественным к локали.

14 голосов
/ 09 февраля 2010

Используйте следующую оговорку в верхней части вашего метода:

if (!preg_match("/^[a-z]$/", $param)) {
    // throw an Exception...
}

Если вы хотите разрешить использование заглавных букв, измените регулярное выражение соответствующим образом:

if (!preg_match("/^[a-zA-Z]$/", $param)) {
    // throw an Exception...
}

Другим способом поддержки нечувствительности к регистру является использование /i модификатора нечувствительности к регистру:

if (!preg_match("/^[a-z]$/i", $param)) {
    // throw an Exception...
}
2 голосов
/ 09 февраля 2010
preg_match('/^[a-zA-Z]$/', $var_vhar);

Метод вернет значение int: при отсутствии совпадений возвращается 0, а при совпадениях - 1.

1 голос
/ 14 февраля 2013

Вы не можете использовать [a-zA-Z] для Unicode.

вот пример работы с Unicode,

if ( preg_match('/^\p{L}+$/u', 'my text') ) {
    echo 'match';
} else {
    echo 'not match';
}
0 голосов
/ 04 октября 2014

Это поможет, надеюсь. Это простая функция в php, которая называется ctype_alpha

$mystring = 'a'
if (ctype_alpha($mystring))
{
    //Then do the code here.
}
0 голосов
/ 09 февраля 2010

Я бы использовал ctype, как предложил Ник, поскольку он не только быстрее, чем регулярное выражение, но даже быстрее, чем большинство строковых функций, встроенных в PHP. Но вам также нужно убедиться, что это один символ:

if (ctype_alpha($ch) && strlen($ch) == 1) {
    // Accept
} else {
    // Reject
}
0 голосов
/ 09 февраля 2010

Вы можете попробовать:

preg_match('/^[a-zA-Z]$/',$input_char);

Возвращаемое значение вышеупомянутой функции - true, если $ input_char содержит один алфавит, иначе - false.Вы можете соответствующим образом использовать возвращаемое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...