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 文本框允许用户只输入字母、数字、点和单词之间的空格。正则表达式

php 正则表达式 只能包含字母和数字

Java用正则表达式 过滤特殊字符,只允许中文、字母或数字,该怎么写?急。。。。

求 js 正则表示式 只能输入英文字母和数字

求javascript正则表达式,不允许用户输入斜杠尖括号等特殊符号,只允许输入数字,字母,汉字.

求PHP用户名注册验证正则表达式(6-16位字符,字母开头,只包含字母数字下划线)可支持中文