【发布时间】:2011-05-19 17:44:35
【问题描述】:
我试过了:
preg_match("/^[a-zA-Z0-9]", $value)
但我猜我做错了什么。
【问题讨论】:
标签: php regex preg-match
我试过了:
preg_match("/^[a-zA-Z0-9]", $value)
但我猜我做错了什么。
【问题讨论】:
标签: php regex preg-match
您遗漏了/(模式分隔符)和$(匹配结束字符串)。
preg_match("/^[a-zA-Z0-9]+$/", $value)
【讨论】:
您不需要为此使用正则表达式,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";
}
}
?>
如果您非常想使用正则表达式,您有几个选择。
首先:
preg_match('/^[\w]+$/', $string);
\w 不仅包括字母数字(包括下划线),还包括所有
\d.
或者:
/^[a-zA-Z\d]+$/
甚至只是:
/^[^\W_]+$/
【讨论】:
[\w\d] 是多余的 - \w 就足够了,因为它已经包含 \d。
+,因此它应该是'/^[\w]+$/'。
+ 量词。
[\w] 更简单地表示为\w。
所以无论如何它都应该失败,但如果它可以工作,它只匹配字符串开头的一位数字。
/^[a-z0-9]+$/i
【讨论】:
试试这个方法 .eregi("[^A-Za-z0-9.]", $value)
【讨论】:
正如 OP 所说,他只想要字母和数字(没有下划线!),在 php 正则表达式中实现这一点的另一种方法是使用 posix 表达式:
/^[[:alnum:]]+$/
注意:这不适用于 Java、JavaScript、Python、Ruby、.NET
【讨论】: