Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 字母、数字和-__Regex - Fatal编程技术网

Regex 字母、数字和-_

Regex 字母、数字和-_,regex,Regex,我在PHP中检查值是否为以下任意组合时遇到问题 字母(大写或小写) 数字(0-9) 下划线(41; 破折号(-) 点(.) 没有空间!或其他角色 举几个例子: 好:“screens123.css” 确定:“screen new file.css” OK:“screen_new.js” 不正常:“screen new file.css” 我想我需要一个正则表达式来实现这一点,因为当给定字符串中包含除上述字符以外的其他字符时,我需要抛出一个错误。您需要的模式类似于(): 说明: ^是线锚的

我在PHP中检查值是否为以下任意组合时遇到问题

  • 字母(大写或小写)
  • 数字(0-9)
  • 下划线(41;
  • 破折号(-)
  • 点(.)
  • 没有空间!或其他角色
举几个例子:

  • 好:“screens123.css”
  • 确定:“screen new file.css”
  • OK:“screen_new.js”
  • 不正常:“screen new file.css”

我想我需要一个正则表达式来实现这一点,因为当给定字符串中包含除上述字符以外的其他字符时,我需要抛出一个错误。

您需要的模式类似于():

说明:

  • ^
    是线锚的开始
  • $
    是线锚的末端
  • […]
    是字符类定义
  • *
    是“零或更多”重复
请注意,文字破折号
-
是字符类定义中的最后一个字符,否则它具有不同的含义(即范围)。
在字符类定义之外也有不同的含义,但在内部,它只是一个文本

工具书类
  • ,及

在PHP中 下面是一个片段,演示如何使用此模式:

<?php

$arr = array(
  'screen123.css',
  'screen-new-file.css',
  'screen_new.js',
  'screen new file.css'
);

foreach ($arr as $s) {
  if (preg_match('/^[\w.-]*$/', $s)) {
    print "$s is a match\n";
  } else {
    print "$s is NO match!!!\n";
  };
}

?>
请注意,模式略有不同,而是使用
\w
。这是“word character”的字符类

API参考

关于规格的说明 这似乎符合您的规范,但请注意,这将与
等匹配,这可能是您想要的,也可能不是您想要的。如果您可以更具体地指定要匹配的模式,则正则表达式将稍微复杂一些

上面的正则表达式也与空字符串匹配。如果至少需要一个字符,请使用
+
(一个或多个)而不是
*
(零个或多个)进行重复

在任何情况下,您都可以进一步澄清您的规范(在询问regex问题时总是有帮助的),但希望您也可以根据上述信息自己学习如何编写模式。

您可以使用

^[\w.-]+$
+
用于确保它至少有一个字符。需要<代码> ^ < /代码>和<代码> $>代码>来表示开始和结束,否则如果字符串在中间有匹配,例如<代码> @ @ @ XYZ %%%%/代码>,那么它仍然是一个匹配项。

\w
已经包括字母(大写和小写)、数字和下划线。所以剩下的
-
,只是放在“类”中进行匹配。
+
表示出现一次或多次


另外,感谢评论中的注释

[A-Za-z0-9.-]*


如果您不想将最后一个
*
交换为
+

之类的东西,那么这也将匹配空字符串

$code = "screen new file.css";
if (!preg_match("/^[-_a-zA-Z0-9.]+$/", $code))
{
    echo "not valid";
}

这将回显“无效”

以实际覆盖您的模式,即,根据您的规则,有效的文件名,我认为您需要更多。注意,从系统角度来看,这与合法文件名不匹配。这将依赖于系统,在它所接受的方面更加自由。这是为了匹配您可接受的模式

^([a-zA-Z0-9]+[_-])*[a-zA-Z0-9]+\.[a-zA-Z0-9]+$
说明:

  • ^
    匹配字符串的开头。这(加上结束匹配)强制字符串符合精确表达式,而不仅仅包含与表达式匹配的子字符串
  • ([a-zA-Z0-9]+[-])*
    一个或多个字母或数字后跟下划线或破折号的出现次数为零或多个。这会导致所有包含破折号或下划线的名称之间都有字母或数字
  • [a-zA-Z0-9]+
    一个或多个字母或数字。这包括所有不包含下划线或破折号的名称
  • \。
    文字句点(点)。强制文件名具有扩展名,并且通过从模式的其余部分排除,只允许在名称和扩展名之间使用句点。如果您希望使用与破折号/下划线相同的技术处理多个扩展名,请在结尾处进行处理
  • [a-zA-Z0-9]+
    一个或多个字母或数字。扩展名必须至少有一个字符长,并且只能包含字母和数字。这是典型的,但是如果您想要允许下划线,也可以解决这个问题。您还可以提供一个长度范围
    {2,3}
    ,而不是一个或多个
    +
    匹配器,如果这更合适的话
  • $
    匹配字符串的结尾。请参见起始字符

    • 这是您正在寻找的模式

      /^[\w-_.]*$/
      
      这意味着什么:

      • ^
        字符串的开头
      • […]
        匹配内部字符
      • \w
        任何单词字符,因此
        0-9
        a-z
        a-z
      • -.
        匹配
        -
        -
      • *
        零个或多个模式或无限制
      • $
        字符串结尾
      如果要限制字符数,请执行以下操作:

      /^[\w-_.]{0,5}$/
      
      /^[\w-_.]{0,5}$/
      
      {0,5}
      表示
      0-5
      字符

      /^[\w-_.]*$/
      
      这意味着什么:

      • ^字符串开头

      • [……]匹配内部字符

      • \w任意单词字符,所以0-9 a-z a-z

      • -_。由charecter和uu和匹配

      • 零个或多个模式或无限 $字符串结尾 如果要限制字符数,请执行以下操作:

        /^[\w-_.]{0,5}$/
        
        /^[\w-_.]{0,5}$/
        
        {0,5}表示0-5个数字和字符


      -
      放在集合的第一位,以避免定义范围。而
      \w
      包括字母数字和下划线。所以你需要
      [\w.-]+
      。谢谢,这对我来说很好:^[\w\d.-]+\.(csv | csv)$这也符合Go(golang)的空原始字符串文本,而接受的答案不符合要求,所以用户坚持使用此解决方案。见