所以我有这个任务。 我必须验证一个名称输入,可以包含大小写字母,撇号,空格或逗号。 所以我想出了这个用于验证:
$name = $_POST['your_name'];
$regex_name = '/([A-Z]|[a-z])([A-Z][a-z\s])+/';
if (!preg_match($regex_name, $name)) {
echo '<span style="color:red">Please input a valid name!</span><br />';
}
但它看起来并不好,我也不知道为什么。
我已经阅读过有关正则表达式和规则的内容,但我不知道我做错了什么。我甚至在stackoverflow上看到了一些例子,但对我来说仍然不清楚。
我认为这应该至少验证字母,但即使对于简单的输入也是错误的,因为错误&#39;。
请帮忙!
答案 0 :(得分:1)
^[a-zA-Z'\s,]+$
此正则表达式将执行以下操作:
在字符类中,我包括a-z
和A-Z
,在示例中,我启用了不区分大小写的标记。所以这有点多余。
现场演示
https://regex101.com/r/rM2iU3/2
示例文字
aaaaaaa
bbbb,bbbb
cccc cccc
ddd'ddddd
fff3ffff
gggggggg
样本匹配
aaaaaaa
bbbb,bbbb
cccc cccc
ddd'ddddd
gggggggg
NODE EXPLANATION
----------------------------------------------------------------------
^ the beginning of a "line"
----------------------------------------------------------------------
[a-zA-Z'\s,]+ any character of: 'a' to 'z', 'A' to 'Z',
''', whitespace (\n, \r, \t, \f, and " "),
',' (1 or more times (matching the most
amount possible))
----------------------------------------------------------------------
$ before an optional \n, and the end of a
"line"
----------------------------------------------------------------------
答案 1 :(得分:0)
答案 2 :(得分:0)
“不能正常工作”不是一个有用的描述。但我猜你的问题很可能是你没有使用字符串开头(^
)和字符串结尾($
)来锚定查询。这意味着您只匹配字符串中任何位置的字符子集。
此外,你没有在问题中这么说,但在你的代码中,你似乎只想允许第一个字符的字母。这应该适合你:
$name = $_POST['your_name'];
$regex_name = "/^[a-z][a-z,' ]+$/i";
if (!preg_match($regex_name, $name)) {
echo '<span style="color:red">Please input a valid name!</span><br />';
}
我还在表达式的末尾使用了i
修饰符,使搜索不区分大小写。