我有这个PHP preg_match代码,假设只允许a-z(大写和小写)0-9和下划线
但是,当我尝试使用用户名" Rizon"它说: 只允许使用有效字符。
以下是代码:
class Place(models.Model):
name = models.CharField(max_length=200)
summary = models.TextField(max_length=1500, blank=True, null=True)
...
def __unicode__(self):
return self.name
如何修复preg_match以便它允许用户名,例如" Rizon"和大写和/或小写字母和/或数字和/或下划线的用户名?
答案 0 :(得分:2)
这应该可以解决问题(您还需要检查用户名仅包含您的模式)
if (!preg_match("/^[a-zA-Z0-9_]+$/",$_POST['username']))
如果不添加^
(开始匹配)和$
(结束匹配),您的正则表达式将仅验证是否包含模式。
答案 1 :(得分:1)
试试这个
!preg_match("/[a-zA-Z0-9_]+/",$_POST['username']);
或
!preg_match("/[a-z0-9_]+/i",$_POST['username']);
答案 2 :(得分:1)
我认为这是最简单的正则表达式。
if (!preg_match("~^\w+$~",$_POST['username'])) {
$_SESSION['error']['username'] = "Only valid characters are allowed.";
}
演示:https://regex101.com/r/rG3sJ3/1
\w
是任何字符a-z,A-Z,0-9和下划线。 +
是一个或多个字符。
^
是字符串的开头,$
是结尾。检查regex101链接以进行测试和更详细的说明。
链接:
https://docs.oracle.com/javase/tutorial/essential/regex/pre_char_classes.html
https://docs.oracle.com/javase/tutorial/essential/regex/quant.html
https://docs.oracle.com/javase/tutorial/essential/regex/bounds.html
答案 3 :(得分:0)
首先,你缺少正则表达式的分隔符。您可以使用/
或#
或任何其他the available ones
接下来,您将声明模式再次匹配,它将转换为“匹配单个字母数字符号后跟下划线”。
所以已经建议使用
[a-zA-Z0-9_]+
作为正则表达式而是使用模式分隔符
preg_match('/[a-zA-Z0-9_]+/',$_POST['username'])
您还可以将modifier i
用于不区分大小写的
preg_match('/[a-z0-9_]+/i',$_POST['username'])
答案 4 :(得分:0)
想想你可能想做的事情:
if (preg_match("/\W/",$_POST['username'])) { // check for non-word chars
$_SESSION['error']['username'] = "Only valid characters are allowed.";
}
对长度进行单独验证:
if (!preg_match("/^.{6,8}$/",$_POST['username'])) { // check for length
$_SESSION['error']['username'] = "6 to 8 letters please";
}