如何检查一个 PHP 字符串是否只包含英文字母和数字?

63

我在JS中使用了这段代码:

if(string.match(/[^A-Za-z0-9]+/))

但是我不知道如何在PHP中实现。

10个回答

109

使用preg_match()函数。

if (!preg_match('/[^A-Za-z0-9]/', $string)) // '/[^a-z\d]/i' should also work.
{
  // string contains only english letters & digits
}

5
是的,这看起来更有效率。寻找第一个不在范围内的字符似乎比扫描整个字符串更明智。 - Your Common Sense
1
我刚试了一下,使用!运算符会得到错误的结果。如果字符串不仅包含英文字母和数字,则if语句内的代码将被执行。 - chap
@chap 你能否提供一个“不起作用”的字符串的例子? - Maxime Pacary
1
例如,如果我提供字符串“{} \”,则您if语句内的代码将执行。但是,您在if语句内的注释//字符串仅包含英文字母和数字表明,您希望if语句内的代码仅在字符串包含a-z A-Z或0-9时执行,但是通过使用!,您的代码相反。 - chap
1
@chap,你看到正则表达式开头的^字符了吗?它意味着一旦发现“无效”字符,preg_match()函数就会返回true。如果没有!,if块将对任何“无效”字符串执行。我会尽快重新测试整个过程,并让你知道结果。 - Maxime Pacary
显示剩余3条评论

34
if(ctype_alnum($string)) {
    echo "String contains only letters and numbers.";
}
else {
    echo "String doesn't contain only letters and numbers.";
}

不确定为什么人们不投票支持 ctype 函数。我无法想象 ctype 函数的范围会出现性能问题。 - Ryan Bayne
4
ctype_alnum 函数受地域环境影响,因此它可能不会按照您的意愿工作! - thethakuri

13

如果你需要检查某个字符串是否为英语,可以使用以下函数。可能会对某些人有所帮助。

function is_english($str)
{
    if (strlen($str) != strlen(utf8_decode($str))) {
        return false;
    } else {
        return true;
    }
}

11

你可以举例如下使用preg_match()函数。

if (preg_match('/[^A-Za-z0-9]+/', $str))
{
  // ok...
}

7

看看这个快捷方式

if(!preg_match('/[^\W_ ] /',$string)) {

}

class [^\W_] 匹配任何字母或数字,但不包括下划线。请注意!符号。它可以避免扫描整个用户输入。


5
if(preg_match('/[^A-Za-z0-9]+/', $str)) {
    // ...
}

2
if (preg_match('/^[\w\s?]+$/si', $string)) {
    // input text is just English or Numeric or space
}

1
这取决于语言环境。对于我来说(法语,语言环境为fr_fr),\w匹配所有带有变音符号的字符,例如éèçàÀ... - Toto

1
if(preg_match('/^[A-Za-z0-9]+$/i', $string)){ // '/^[A-Z-a-z\d]+$/i' should work also
// $string constains both string and integer
}

萝卜的位置不正确,因此它将搜索除方括号内的内容以外的所有内容。当萝卜在外面时,它会搜索方括号内的内容。


0

PHP可以使用preg_match(regex, string)将字符串与正则表达式进行比较,例如:

if (!preg_match('/[^A-Za-z0-9]+/', $string)) {
    // $string contains only English letters and digits
}

-1
以下代码将处理特殊字符和空格。
$string = 'hi, how are you ?';
if (!preg_match('/[^A-Za-z0-9 #$%^&*()+=\-\[\]\';,.\/{}|":<>?~\\\\]+/', $string)) // '/[^a-z\d]/i' should also work.
{
    echo 'english';
}else
{
    echo 'non-english';
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接