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

Jas*_*n94 44 php regex preg-match

我试过了:

preg_match("/^[a-zA-Z0-9]", $value)
Run Code Online (Sandbox Code Playgroud)

但我猜我做错了.

SW4*_*SW4 96

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";
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

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

如果你拼命想要使用正则表达式,你有几个选择.

首先:

preg_match('/^[\w]+$/', $string);
Run Code Online (Sandbox Code Playgroud)

\w包括超过字母数字(包括下划线),但包括所有\d.

或者:

/^[a-zA-Z\d]+$/
Run Code Online (Sandbox Code Playgroud)

甚至只是:

/^[^\W_]+$/
Run Code Online (Sandbox Code Playgroud)

  • `[\ w\d]`是多余的 - '\ w`就足够了,因为它已经包含了`\ d`. (5认同)
  • 在第一个例子中,缺少一个`+`,所以它应该是`'/ ^ [\ w] + $ /'`. (2认同)

Ken*_*ins 20

你离开了/(模式分隔符)和$(匹配结束字符串).

preg_match("/^[a-zA-Z0-9]+$/", $value)
Run Code Online (Sandbox Code Playgroud)


Kin*_*nch 13

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

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

/^[a-z0-9]+$/i
Run Code Online (Sandbox Code Playgroud)