正则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,如果你不想交换的最后*
为+