PHP - 正则表达式只允许字母和数字
Posted
技术标签:
【中文标题】PHP - 正则表达式只允许字母和数字【英文标题】:PHP - regex to allow letters and numbers only 【发布时间】:2011-05-19 17:44:35 【问题描述】:我试过了:
preg_match("/^[a-zA-Z0-9]", $value)
但我猜我做错了什么。
【问题讨论】:
【参考方案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
【讨论】:
以上是关于PHP - 正则表达式只允许字母和数字的主要内容,如果未能解决你的问题,请参考以下文章
Winforms 文本框允许用户只输入字母、数字、点和单词之间的空格。正则表达式
Java用正则表达式 过滤特殊字符,只允许中文、字母或数字,该怎么写?急。。。。