Preg_match不起作用

时间:2015-07-06 12:46:02

标签: php regex preg-match

我有这个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"和大写和/或小写字母和/或数字和/或下划线的用户名?

5 个答案:

答案 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"; 
}