如何在给定条件下检查字符串的模式(php / regex)

时间:2017-08-10 11:40:07

标签: php regex

这就是我想要做的事情,

   $line = "dsfsdf";
   if (!preg_match('/^(?=.{1,30}$)[a-zA-Z0-9\-\_]*$^/', $line))
   {
      echo 'No Match found';
   }
   else
   {
       echo 'Match found';
   }

要求如下,

  • 它可以有字符
  • 它可以有数字
  • 作为特殊字符,它只能包含连字符( - )和下划线(_)字符

我对正则表达式部分不太了解。有人可以通过简单的解释指导我如何实现它吗?

1 个答案:

答案 0 :(得分:2)

您必须在结尾删除^(字符串锚的开头)。此外,您可以将[a-zA-Z0-9_]替换为\w,因为没有任何修饰符,它们是相等的。

(?=.{1,30}$)前瞻使得正则表达式引擎仅匹配1到30个字符的字符串。您可以删除前瞻,然后将限制量词应用于您的角色类。

您可以使用

'/^[\w-]{1,30}$/'

如果您更喜欢使用

'/^[a-zA-Z0-9_-]{1,30}$/'

请参阅PHP demo

两者都意味着:

  • ^ - 字符串开头
  • [\w-]{1,30} - 1至30个字母/数字/下划线/ -符号
  • $ - 字符串结尾。 注意要匹配字符串的最后一部分,您需要使用D修饰符,或将$替换为\z锚点(即使用{{ 1}}或'/^[\w-]{1,30}$/D'然后)。