每次使用 preg_match() returns 0 验证表单输入

Validating form input with preg_match() returns 0 every time

我正在验证标记为 'tags' 的表单字段的表单输入,用户在其中输入描述上传图像的标签。验证后,我 preg_replace() 任何带逗号的 spaces 这样输入就是 csv 输入。

无论输入什么,preg_match() returns 0.我做错了什么?

我希望我的标签包括:

这是我的正则表达式字符串:

$regex = '/^[ ,][a-zA-Z0-9]+(?:[ ,-]+[a-zA-Z0-9])[ ,]$/';

这是我的 preg_match 语句,包含在 else 退出程序的 if 语句中(当 preg_match returns 0)。

preg_match($regex, $_POST['tags']) == 1;

以下是一些示例输入以及它们是否有效。

我已经在 Regex101 上尝试了实时正则表达式工具,但我无法弄清楚哪里出了问题。

在那种情况下,我认为这样的事情应该可行:

/^[\w, \-]+$/g

NOTE: I removed the \d I had added previously since it's already included in \w.

https://regex101.com/r/sfulPW/2

编辑

正则表达式的工作原理如下:

  1. ^表示行的开始,也就是我们应该开始匹配的地方。
  2. [\w, \-]+ 指示匹配以下一项或多项 +
    • \w任意单词字符或数字(不区分大小写)
    • ,任意逗号
    • 任意 space
    • \- 任意破折号
  3. $表示行尾,也就是我们应该停止匹配的地方。
  4. g 标志允许我们进行多次匹配。