regex php preg_match()逗号分隔名称的代码

tzxcd3kk  于 2023-03-09  发布在  PHP
关注(0)|答案(5)|浏览(175)

我需要使用preg_match()来验证输入模式,以便模式类似于“anyname1,anyname2,anyname3“。
注意结尾也有一个逗号。逗号之间的任何字母或数字都是有效的,数字不一定要出现在结尾。例如“nam1e,Na2me,NNm22,”是有效的。
我试过^([A-Za-z0-9] *, *)*[A-Za-z0-9]$,但没有效果。我也看过其他帖子,但没有得到完美的答案。
有人能给予我一个答案吗?

uajslkp6

uajslkp61#

如果你只想得到没有逗号的实际值,那么你可以简单地使用这个:
\w+(?=[,])
http://regex101.com/r/xT6wE4/1

wbrvyc0a

wbrvyc0a2#

这听起来像是您想要验证字符串是否包含一系列逗号分隔的字母数字子字符串,并带有一个可选的尾随逗号。
在那种情况下,这应该能达到你的目的。

$str = "anyname1,anyname2,anyname3,";

$re = '~^([a-z0-9]+,)+$~i';

if (preg_match($re, $str)) {
    // String matches the pattern!
}
else {
    // Nope!
}

如果存储在$str中的值包含一个尾随空格(如示例中所示),并且您不想对该值使用trim(),则以下正则表达式将允许在$str的末尾使用空格:

~^([a-z0-9]+,)+\s*$~i
5anewei6

5anewei63#

为什么要用如此复杂的方法来解决一个简单的问题呢?你可以分两步来做同样的事情:
1:删除空格、换行符、换行符和逗号:

$line = trim($line," \r\n,");

2:在逗号处展开以查看所有名称:

$array = explode(',',$line);

你没有告诉我们你要用它来做什么,所以我不知道你真正需要什么格式,但我的观点是,你不需要复杂的字符串函数来做简单的任务。

v9tzhpje

v9tzhpje4#

^([a-zA-Z0-9]+,)+$

您可以简单地做到这一点。参见演示。
http://regex101.com/r/yR3mM3/8

nfs0ujit

nfs0ujit5#

不如这样

function implodeForRegex($itemRex, $glue) {
    return "(" . $itemRex . $glue ")*" . $itemRex;
}
...
preg_match('/' . implodeForRegex('([\d]+)', ',') . '/', $string)

相关问题