【问题标题】:PHP - regex to allow letters and numbers onlyPHP - 正则表达式只允许字母和数字
【发布时间】:2011-05-19 17:44:35
【问题描述】:

我试过了:

preg_match("/^[a-zA-Z0-9]", $value)

但我猜我做错了什么。

【问题讨论】:

    标签: php regex preg-match


    【解决方案1】:

    您遗漏了/(模式分隔符)和$(匹配结束字符串)。

    preg_match("/^[a-zA-Z0-9]+$/", $value)
    

    【讨论】:

    • 此解决方案不适用于土耳其语字符。谢谢
    【解决方案2】:

    1。使用 PHP 内置的ctype_alnum

    您不需要为此使用正则表达式,PHP 有一个内置函数 ctype_alnum 会为您执行此操作,并且执行速度更快:

    <?php
    $strings = array('AbCd1zyZ9', 'foo!#$bar');
    foreach ($strings as $testcase) {
        if (ctype_alnum($testcase)) {
            echo "The string $testcase consists of all letters or digits.\n";
        } else {
            echo "The string $testcase does not consist of all letters or digits.\n";
        }
    }
    ?>
    

    2。或者,使用正则表达式

    如果您非常想使用正则表达式,您有几个选择。

    首先:

    preg_match('/^[\w]+$/', $string);
    

    \w 不仅包括字母数字(包括下划线),还包括所有 \d.

    或者:

    /^[a-zA-Z\d]+$/
    

    甚至只是:

    /^[^\W_]+$/
    

    【讨论】:

    • [\w\d] 是多余的 - \w 就足够了,因为它已经包含 \d
    • 在第一个示例中缺少+,因此它应该是'/^[\w]+$/'
    • 添加了缺少的+ 量词。
    • [\w] 更简单地表示为\w
    【解决方案3】:
    • 缺少端锚 $
    • 缺少乘数
    • 缺少结束分隔符

    所以无论如何它都应该失败,但如果它可以工作,它只匹配字符串开头的一位数字。

    /^[a-z0-9]+$/i
    

    【讨论】:

      【解决方案4】:

      试试这个方法 .eregi("[^A-Za-z0-9.]", $value)

      【讨论】:

      • ereg/eregi 是旧函数。请改用 preg_match。此外,您应该添加 i 标识符,以便字母不区分大小写。
      【解决方案5】:

      正如 OP 所说,他只想要字母和数字(没有下划线!),在 php 正则表达式中实现这一点的另一种方法是使用 posix 表达式:

      /^[[:alnum:]]+$/
      

      注意:这不适用于 Java、JavaScript、Python、Ruby、.NET

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-20
        • 1970-01-01
        • 2011-03-05
        • 1970-01-01
        相关资源
        最近更新 更多