字母,数字和_的正则表达式

Jor*_*rre 82 regex

如果值是以下任何组合,我在检查PHP时遇到问题

  • 字母(大写或小写)
  • 数字(0-9)
  • 下划线(_)
  • 破折号( - )
  • 点(.)
  • 空间不足!或其他角色

几个例子:

  • 好的:"screen123.css"
  • 好的:"screen-new-file.css"
  • 好的:"screen_new.js"
  • 不行:"屏幕新文件.css"

我想我需要一个正则表达式,因为当一个给定字符串中包含其他字符而不是上面提到的字符时,我需要抛出一个错误.

pol*_*nts 170

你想要的模式是这样的(在rubular.com上看到它):

^[a-zA-Z0-9_.-]*$
Run Code Online (Sandbox Code Playgroud)

说明:

  • ^ 是线锚的开始
  • $ 是线锚的结束
  • [...] 是一个字符类定义
  • * 是"零或多"重复

请注意,文字短划线-是字符类定义中的最后一个字符,否则它具有不同的含义(即范围).该.也有人物类定义之外的不同的含义,但里面,它只是一个文字.

参考


在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";
  };
}

?>
Run Code Online (Sandbox Code Playgroud)

以上打印(如ideone.com上所示):

screen123.css is a match
screen-new-file.css is a match
screen_new.js is a match
screen new file.css is NO match!!!
Run Code Online (Sandbox Code Playgroud)

请注意,使用的模式略有不同\w.这是"单词字符"的字符类.

API参考


关于规格的说明

这似乎遵循您的规范,但请注意,这将匹配.....等等,可能或可能不是您想要的东西.如果您可以更具体地说明要匹配的模式,那么正则表达式会稍微复杂一些.

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

在任何情况下,您都可以进一步阐明您的规范(在询问正则表达式问题时总是有帮助的),但希望您也可以在给出上述信息的情况下自己学习如何编写模式.


nop*_*ole 11

您可以使用

^[\w\d_.-]+$
Run Code Online (Sandbox Code Playgroud)

+是为了确保它至少有1个字符.需要^$表示开头和结尾,否则如果字符串中间有匹配,@@@@xyz%%%%那么它仍然是匹配.

  • 将`-`放在集合中,以避免定义范围.并且`\ w`涵盖了字母数字和下划线.所以你需要`[\ w .-] +`. (3认同)

Fle*_*ipp 10

这是您要找的图案

/^[\w-_.]*$/
Run Code Online (Sandbox Code Playgroud)

这是什么意思:

  • ^ 字符串的开始
  • [...] 匹配里面的字符
  • \w 任何单词字符 0-9 a-z A-Z
  • -_.匹配-_.
  • * 零个或多个模式或无限
  • $ 字符串结束

如果要限制字符数:

/^[\w-_.]{0,5}$/
Run Code Online (Sandbox Code Playgroud)

{0,5}意思是0-5字符

  • 请注意,“\w”包含“_” (2认同)

tva*_*son 7

要实际覆盖您的模式,即根据您的规则有效的文件名,我认为您需要更多.请注意,从系统角度来看,这与合法文件名不匹配.这将取决于系统,并且在接受的内容方面更加自由.这旨在匹配您可接受的模式.

^([a-zA-Z0-9]+[_-])*[a-zA-Z0-9]+\.[a-zA-Z0-9]+$
Run Code Online (Sandbox Code Playgroud)

说明:

  • ^匹配字符串的开头.这(加上结束匹配)强制字符串符合确切的表达式,而不仅仅包含与表达式匹配的子字符串.
  • ([a-zA-Z0-9]+[_-])*零次或多次出现一个或多个字母或数字后跟下划线或短划线.这会导致包含短划线或下划线的所有名称之间都包含字母或数字.
  • [a-zA-Z0-9]+一个或多个字母或数字.这涵盖了所有不包含下划线或短划线的名称.
  • \.字面时间(点).强制文件名具有扩展名,并且从模式的其余部分中排除,仅允许在名称和扩展名之间使用句点.如果你想要使用与短划线/下划线相同的技术来处理多个扩展,那么就在最后.
  • [a-zA-Z0-9]+一个或多个字母或数字.扩展名必须至少有一个字符长,并且必须只包含字母和数字.这是典型的,但如果您想要允许下划线,那么也可以解决.如果更合适,您还可以提供长度范围{2,3}而不是一个或多个+匹配器.
  • $匹配字符串的结尾.查看起始字符.


小智 6

这样的事情应该工作

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

这将回应“无效”