用于4个字符的php正则表达式

用于4个字符的php正则表达式,php,regex,Php,Regex,我正在尝试为一个字符串构造一个正则表达式,该字符串可以包含0到4个字符。字符只能是0到9或a到z或a到z 我有下面的表达式,它可以工作,但我不知道如何设置它,以便最多只接受4个字符。在此表达式中,接受与模式匹配的0到无穷多个字符 '([0-9a-zA-Z\s]*)' 您可以使用{0,4}而不是*,这将允许前面标记的零到四个实例: '([0-9a-zA-Z\s]{0,4})' (*实际上与{0,}相同,即至少为零且无边界。)您可以使用{0,4}而不是*,这将允许前面令牌的零到四个实例: '([

我正在尝试为一个字符串构造一个正则表达式,该字符串可以包含0到4个字符。字符只能是0到9或a到z或a到z

我有下面的表达式,它可以工作,但我不知道如何设置它,以便最多只接受4个字符。在此表达式中,接受与模式匹配的0到无穷多个字符

'([0-9a-zA-Z\s]*)'

您可以使用
{0,4}
而不是
*
,这将允许前面标记的零到四个实例:

'([0-9a-zA-Z\s]{0,4})'

*
实际上与
{0,}
相同,即至少为零且无边界。)

您可以使用
{0,4}
而不是
*
,这将允许前面令牌的零到四个实例:

'([0-9a-zA-Z\s]{0,4})'

*
实际上与
{0,}
相同,即至少为零且无边界。)

您可以使用
{}
指定有限量词:

[0-9a-zA-Z\s]{0,4}

您可以使用
{}
指定有限量词:

[0-9a-zA-Z\s]{0,4}

如果要匹配完全由零到四个字符组成的字符串,需要在两端锚定正则表达式:

'(^[0-9a-zA-Z]{0,4}$)'
我冒昧地删除了
\s
,因为它不符合您的问题描述。另外,我不知道你是否意识到了这一点,但这些括号并不构成一个组,捕获或其他。他们甚至不是正则表达式的一部分;PHP使用它们作为正则表达式分隔符。您的正则表达式相当于:

'/^[0-9a-zA-Z]{0,4}$/'
如果您确实希望在组#1中捕获整个匹配,则应在分隔符内添加括号:

'/(^[0-9a-zA-Z]{0,4}$)/'

。。。但我不明白你为什么要这么做;整个匹配始终自动捕获在组#0中。

如果要匹配完全由零到四个字符组成的字符串,则需要在两端锚定正则表达式:

'(^[0-9a-zA-Z]{0,4}$)'
我冒昧地删除了
\s
,因为它不符合您的问题描述。另外,我不知道你是否意识到了这一点,但这些括号并不构成一个组,捕获或其他。他们甚至不是正则表达式的一部分;PHP使用它们作为正则表达式分隔符。您的正则表达式相当于:

'/^[0-9a-zA-Z]{0,4}$/'
如果您确实希望在组#1中捕获整个匹配,则应在分隔符内添加括号:

'/(^[0-9a-zA-Z]{0,4}$)/'

。。。但我不明白你为什么要这么做;整个匹配始终自动捕获在0组中。

您可以完全避免使用正则表达式

if (strlen($str) <= 4 && ctype_alnum($str)) {
   // contains 0-4 characters, that are either letters or digits
}

if(strlen($str)可以完全避免使用正则表达式

if (strlen($str) <= 4 && ctype_alnum($str)) {
   // contains 0-4 characters, that are either letters or digits
}
if(strlen($str)仅供参考,称为“量词”仅供参考,称为“量词”