正则expression式的字母,数字和 –

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

  • 字母(大写或小写)
  • 数字(0-9)
  • 下划线(_)
  • 破折号( – )
  • 点(。)
  • 没有空间! 或其他字符

几个例子:

  • OK:“screen123.css”
  • OK:“screen-new-file.css”
  • 好的:“screen_new.js”
  • 不行:“screen new file.css”

我想我需要一个正则expression式,因为我需要抛出一个错误,当一个给定的string中有其他字符比上面提到的。

你想要的模式是类似的( 见rubular.com上 ):

^[a-zA-Z0-9_.-]*$ 

说明:

  • ^是string锚的开始
  • $是string锚点的结尾
  • [...]是一个字符类的定义
  • *是“零或多”重复

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

参考

  • regular-expressions.info/Anchors,Character Classes and Repetition

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

上面的照片( 如在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!!! 

请注意,模式稍有不同,用\w代替。 这是“单词字符”的字符类。

API参考

  • preg_match

规格说明

这似乎遵循您的规范,但请注意,这将匹配的东西,如.....等,这可能会或可能不会是你的愿望。 如果你可以更具体地匹配你想要的模式,正则expression式会稍微复杂一点。

上面的正则expression式也匹配空string。 如果您至less需要一个字符,则使用+ (一个或多个)而不是* (零个或多个)重复。

无论如何,你可以进一步澄清你的规范(在提出正则expression式问题时总是有帮助的),但是希望你也可以学习如何根据上述信息自己编写模式。

要真正地覆盖你的模式,即根据你的规则有效的文件名,我认为你需要多一点。 请注意,这不符合系统angular度的合法文件名称。 这将是系统的依赖和更接受它所接受的自由。 这是为了匹配你可以接受的模式。

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

说明:

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

您可以使用

 ^[\w\d_.-]+$ 

+是确保它至less有一个字符。 需要用^$来表示开始和结束,否则如果string在中间匹配,比如@@@@xyz%%%%那么它仍然是匹配的。

像这样的东西应该工作

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

这将回显“无效”

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

这也将匹配空string,如果你不想交换的最后*+