【问题标题】: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 中做到这一点。

【问题讨论】:

    标签: php regex


    【解决方案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...
                }
                

                【讨论】:

                  猜你喜欢
                  • 2017-11-02
                  • 2012-08-20
                  • 2011-07-11
                  • 2013-03-08
                  • 2012-05-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2021-10-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多