PHP - 正则表达式只允许字母和数字

时间:2010-12-03 12:41:43

标签: php regex preg-match

我试过了:

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

但我猜错了。

5 个答案:

答案 0 :(得分:91)

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_]+$/

答案 1 :(得分:18)

您不使用/(模式分隔符)和$(匹配结束字符串)。

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

答案 2 :(得分:12)

  • 缺少结束锚$
  • 缺少乘数
  • 缺少结束分隔符

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

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

答案 3 :(得分:2)

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

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

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

答案 4 :(得分:-1)

试试这种方式.eregi(“[^ A-Za-z0-9。]”,$ value)