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

Posted

技术标签:

【中文标题】如何检查一个php字符串是不是只包含英文字母和数字?【英文标题】:How to check, if a php string contains only english letters and digits?如何检查一个php字符串是否只包含英文字母和数字? 【发布时间】:2012-03-10 05:07:48 【问题描述】:

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

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

但我不知道,如何在 php 中做到这一点。

【问题讨论】:

【参考方案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';

【讨论】:

【参考方案2】:
if(preg_match('/^[A-Za-z0-9]+$/i', $string)) // '/^[A-Z-a-z\d]+$/i' should work also
// $string constains both string and integer

胡萝卜放错了位置,所以它会搜索除方括号内的内容之外的所有内容。当胡萝卜在外面时,它会搜索方括号中的内容。

【讨论】:

【参考方案3】:
if (preg_match('/^[\w\s?]+$/si', $string)) 
    // input text is just English or Numeric or space

【讨论】:

这取决于语言环境。对我来说(法语,语言环境 fr_fr)\w 匹配所有带有变音符号的字符,例如 éèçàÀ...【参考方案4】:

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

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

【讨论】:

【参考方案5】:

看看这个快捷方式

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


class [^\W_] 匹配任何字母或数字,但不匹配下划线。并注意! 符号。它将使您免于扫描整个用户输入。

【讨论】:

【参考方案6】:

如果你需要检查它是否是英文的。您可以使用以下功能。可能会帮助某人..

function is_english($str)

    if (strlen($str) != strlen(utf8_decode($str))) 
        return false;
     else 
        return true;
    

【讨论】:

【参考方案7】:

使用preg_match()。

if (!preg_match('/[^A-Za-z0-9]/', $string)) // '/[^a-z\d]/i' should also work.

  // string contains only english letters & digits

【讨论】:

是的。它看起来更有效率。寻找第一个非范围内的字符似乎比扫描整个字符串更明智。 N.B 英文版的上述链接在这里:php.net/manual/en/function.preg-match.php 我刚试过这个和使用!运算符给出错误的结果。如果字符串不只包含英文字母和数字,if语句中的代码将被执行。 例如,如果我给出字符串“\”,则 if 语句中的代码将执行。但是您在 if 语句中的注释 // 字符串仅包含英文字母和数字表明您希望 if 语句中的代码仅在字符串包含 a-z A-Z 或 0-9 时执行,但是使用 !你的代码正好相反。 @chap 你看到正则表达式开头的 ^ 字符了吗?这意味着一旦找到“无效”字符,preg_match() 就会返回 true。如果没有 !,将对任何“无效”字符串执行 if 块。不过,我会尽快重新测试整个过程,并随时通知您。【参考方案8】:
if(ctype_alnum($string)) 
    echo "String contains only letters and numbers.";

else 
    echo "String doesn't contain only letters and numbers.";

【讨论】:

不知道为什么人们不投票 ctype 函数。我无法想象 ctype 函数的范围存在性能问题。 ctype_alnum 取决于语言环境,因此它可能无法如您所愿!【参考方案9】:
if(preg_match('/[^A-Za-z0-9]+/', $str)) 
    // ...

【讨论】:

【参考方案10】:

例如,您可以使用preg_match() 函数。

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

  // ok...

【讨论】:

以上是关于如何检查一个php字符串是不是只包含英文字母和数字?的主要内容,如果未能解决你的问题,请参考以下文章

php 检查字符串是否只包含字母和数字

如何检查字符串是不是至少包含一个数字、字母和既不是数字也不是字母的字符?

PHP:检查我的字符串是不是只包含数字和“X”字符

php如何判断字符串是不是是字母和数字的组合

C++ 检查字符串是不是包含至少 1 个数字和 1 个字母

检查字符串是不是包含字母数字