如果php字符串只包含英文字母和数字,如何检查?

如果php字符串只包含英文字母和数字,如何检查?,php,regex,Php,Regex,在JS中,我使用了以下代码: if(string.match(/[^A-Za-z0-9]+/)) 但我不知道如何在PHP中实现它。例如,您可以使用函数 if (preg_match('/[^A-Za-z0-9]+/', $str)) { // ok... } 使用 查看此快捷方式 if(!preg_match('/[^\W_ ] /',$string)) { } 类[^\W\u]匹配任何字母或数字,但不匹配下划线。请注意符号。它将使您不必扫描整个用户输入 如果您需要检查它是否为英语。

在JS中,我使用了以下代码:

if(string.match(/[^A-Za-z0-9]+/))
但我不知道如何在PHP中实现它。

例如,您可以使用函数

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


查看此快捷方式

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

}

类[^\W\u]
匹配任何字母或数字,但不匹配下划线。请注意
符号。它将使您不必扫描整个用户输入

如果您需要检查它是否为英语。您可以使用下面的函数。可能会帮助某人

if(ctype_alnum($string)) {
    echo "String contains only letters and numbers.";
}
else {
    echo "String doesn't contain only letters and numbers.";
}
function is_english($str)
{
    if (strlen($str) != strlen(utf8_decode($str))) {
        return false;
    } else {
        return true;
    }
}

PHP可以使用
preg\u match(regex,string)
将字符串与正则表达式进行比较,如下所示:

if(!preg_match('/[^A-Za-z0-9]+/',$string)){
//$string只包含英文字母和数字
}

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

以下代码将考虑特殊字符和空格

$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';
}
$string='hi,你好吗?';
如果(!preg_match('/[^A-Za-z0-9$%^&*()+=\-\[\]\',.\/{}}匹配:?~\\\]+/',$string))/'/[^A-z\d]/i'也可以工作。
{
呼应“英语”;
}否则
{
回声“非英语”;
}

是的。它看起来效率更高。查找第一个非范围内字符似乎比扫描整个字符串更明智。注意:上面链接的英文版本:我刚刚尝试了这个方法,但使用!运算符给出了错误的结果。如果字符串不只包含英文字母和数字,则将执行if语句中的代码。例如,如果我给字符串“{}”\“将执行if语句中的代码。但是如果if语句//字符串中的注释仅包含英文字母和数字,则表明您希望if语句中的代码仅在该字符串包含a-z a-z或0-9时执行,但是请使用!您的代码的作用正好相反。@chap您看到正则表达式开头的^char了吗?这意味着一旦找到“无效”字符,preg_match()就会返回true。没有这个!,将对任何“无效”字符串执行if块。我会尽快重新测试整个过程,但我会随时通知你。我不知道为什么人们不投票选择ctype函数。我无法想象ctype函数的范围存在性能问题。ctype_alnum取决于区域设置,因此可能无法按您的意愿工作!这取决于地点。对我来说(法语,locale frèfr)
\w
匹配所有带变音符号的字符,如
èèèèÀ…
function is_english($str)
{
    if (strlen($str) != strlen(utf8_decode($str))) {
        return false;
    } else {
        return true;
    }
}
if (preg_match('/^[\w\s?]+$/si', $string)) {
    // input text is just English or Numeric or space
}
if(preg_match('/^[A-Za-z0-9]+$/i', $string)){ // '/^[A-Z-a-z\d]+$/i' should work also
// $string constains both string and integer
}
$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';
}