正则表达式阻止多个项目

时间:2017-04-30 08:16:04

标签: php regex preg-match

我在网站上有一个收集用户详细信息的表单。有一个傻瓜提交的表格名称如" Barneycok"来自不同的IP地址,所以我学会了如何阻止该名称在表单上进行。

我学到了一点正则表达式,足以写下这篇小文章:

if (preg_match('/\b(\w*arneycok)\b/', $FirstName)){
$error.= "<li><font face=arial><strong>Sorry, an error occured.  Please try again later.</strong><br><br>"; 
$errors=1;
}

代码完美无缺,我再也没有这个名字了。但是,最近有人在名称字段中输入了一串数字。

字符串如下所示:

123456789
123498568
123477698
12346897w

如果您注意到,前4个字符始终保持不变。

那么如何在上面的正则表达式中添加它,以便如果名称以&#34; 1234&#34;开头,它将简单地匹配该正则表达式并向用户提供错误代码?

非常感谢您的帮助。

的Jaime

3 个答案:

答案 0 :(得分:0)

以下正则表达式将起作用。

^1234.*

答案 1 :(得分:0)

这将匹配以$FirstName开头的1234。要匹配Barneycok这样的特定字词,您应该使用此(b|B)arneycok

正则表达式: ^\s*1234|\b(?:b|B)arneycok\b

  

1。 ^\s*12341234开头,可以在开始时包含空格

     

2。 |or条件类似,

     

3。 \b(?:b|B)arneycok\b匹配包含barneycokBarneycok

的字词

Try this code snippet here

if (preg_match('/^1234|\b(?:b|B)arneycok\b/i', $FirstName))
{
    $error.= "<li><font face=arial><strong>Sorry, an error occured.  Please try again later.</strong><br><br>";
    $errors = 1;
}

答案 2 :(得分:0)

为了提供最佳模式来保护您的网站,我想提供此信息:

/^\s*1234|barneycok/i

这将匹配一个字符串,该字符串具有1234作为其第一个非白色字符以及包含子字符串barneycok的字符串(不区分大小写)。

Demo Link

您会注意到模式:

  • 省略了前导词边界(让它抓住abarneycok),
  • 并不打算使用Bb之间的管道的非捕获组(因为使用i标志时没有意义)
  • 省略尾随字边界(让它抓住barneycoka
  • 使用i标记,以便捕获bArNeYcOk

您可以使用以下方式实现模式:

if(preg_match('/^\s*1234|barneycok/i',$FirstName)){
    $error.="<li><font face=arial><strong>Sorry, an error occurred. Please try again later.</strong><br><br>"; 
    $errors=1;
}

在SO上,重要的是发布最佳答案并授予绿色标记,因为次优答案可能会导致OP表现不佳以及教授未来SO读者不良做法/草率编码写作习惯。我希望你发现这个改进很有帮助,也很有用。