确定字符是否为字母

时间:2010-02-09 05:54:10

标签: php validation

遇到问题。

假设我有一个由单个字符组成的参数,我只想接受字母字符。我如何确定传递的参数是拉丁字母的成员(a - z)?

顺便说一下我使用PHP Kohana 3。

感谢。

7 个答案:

答案 0 :(得分:19)

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

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

如果正确设置,也会考虑区域设置。

编辑:要完成,其他海报似乎认为您需要确保参数是单个字符,否则参数无效。要检查字符串的长度,可以使用strlen()。如果strlen()返回任何非1号码,那么您也可以拒绝该参数。

就目前而言,你回答时的问题表明你在某个地方有一个单一的角色参数,并且你想检查它是否按字母顺序排列。我提供了一个通用的解决方案来实现这一点,并且也是对语言环境友好的。

答案 1 :(得分:14)

在方法的顶部使用以下保护条款:

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 :(得分:2)

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

方法将返回int值:for no match返回0,匹配返回1。

答案 3 :(得分:1)

您不能将[a-zA-Z]用于Unicode。

这是使用Unicode的示例,

if ( preg_match('/^\p{L}+$/u', 'my text') ) {
    echo 'match';
} else {
    echo 'not match';
}

答案 4 :(得分:0)

您可以尝试:

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

如果$ input_char包含单个字母,则上述函数的返回值为true,否则为false。您可以适当地使用返回值。

答案 5 :(得分:0)

我建议使用ctype,因为它不仅比正则表达式更快,它甚至比PHP内置的大多数字符串函数更快。但你还需要确保它是一个单一字符:

if (ctype_alpha($ch) && strlen($ch) == 1) {
    // Accept
} else {
    // Reject
}

答案 6 :(得分:0)

这将有希望。这是一个简单的PHP函数,名为ctype_alpha

$mystring = 'a'
if (ctype_alpha($mystring))
{
    //Then do the code here.
}