每次使用 preg_match() returns 0 验证表单输入
Validating form input with preg_match() returns 0 every time
我正在验证标记为 'tags' 的表单字段的表单输入,用户在其中输入描述上传图像的标签。验证后,我 preg_replace() 任何带逗号的 spaces 这样输入就是 csv 输入。
无论输入什么,preg_match() returns 0.我做错了什么?
我希望我的标签包括:
- 以任何字母(不区分大小写)and/or 数字或 space
开头
- 包含任何字母、数字、space、逗号和连字符
- 以任何字母、数字、space 或逗号结尾
这是我的正则表达式字符串:
$regex = '/^[ ,][a-zA-Z0-9]+(?:[ ,-]+[a-zA-Z0-9])[ ,]$/';
这是我的 preg_match 语句,包含在 else 退出程序的 if 语句中(当 preg_match returns 0)。
preg_match($regex, $_POST['tags']) == 1;
以下是一些示例输入以及它们是否有效。
- 绿色轮廓,三角形,2d*% => 无效
- 绿色轮廓,三角形,2d => 有效
- 绿色轮廓三角形 2d => 有效
我已经在 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
编辑
正则表达式的工作原理如下:
^
表示行的开始,也就是我们应该开始匹配的地方。
[\w, \-]+
指示匹配以下一项或多项 +
:
\w
任意单词字符或数字(不区分大小写)
,
任意逗号
任意 space
\-
任意破折号
$
表示行尾,也就是我们应该停止匹配的地方。
g
标志允许我们进行多次匹配。
我正在验证标记为 'tags' 的表单字段的表单输入,用户在其中输入描述上传图像的标签。验证后,我 preg_replace() 任何带逗号的 spaces 这样输入就是 csv 输入。
无论输入什么,preg_match() returns 0.我做错了什么?
我希望我的标签包括:
- 以任何字母(不区分大小写)and/or 数字或 space 开头
- 包含任何字母、数字、space、逗号和连字符
- 以任何字母、数字、space 或逗号结尾
这是我的正则表达式字符串:
$regex = '/^[ ,][a-zA-Z0-9]+(?:[ ,-]+[a-zA-Z0-9])[ ,]$/';
这是我的 preg_match 语句,包含在 else 退出程序的 if 语句中(当 preg_match returns 0)。
preg_match($regex, $_POST['tags']) == 1;
以下是一些示例输入以及它们是否有效。
- 绿色轮廓,三角形,2d*% => 无效
- 绿色轮廓,三角形,2d => 有效
- 绿色轮廓三角形 2d => 有效
我已经在 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
编辑
正则表达式的工作原理如下:
^
表示行的开始,也就是我们应该开始匹配的地方。[\w, \-]+
指示匹配以下一项或多项+
:\w
任意单词字符或数字(不区分大小写),
任意逗号\-
任意破折号
$
表示行尾,也就是我们应该停止匹配的地方。g
标志允许我们进行多次匹配。