我在检查 PHP 中的值是否是以下任何组合时遇到了麻烦
举几个例子:
我想我需要一个正则表达式,因为我需要抛出一个错误,当一个给定的字符串有其他字符在它比上面提到的。
您需要的模式类似于(在 rubular.com 上看) :
^[a-zA-Z0-9_.-]*$
说明:
^
$
[...]
*
注意,文字破折号 -是字符类定义中的最后一个字符,否则它就有不同的含义(即范围)。在字符类定义之外,.也有不同的含义,但在字符类定义之内,它只是一个字面的 .
-
.
下面是一段演示如何使用这种模式的片段:
<?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代替。这是“单词字符”的字符类。
\w
preg_match
这似乎符合您的规范,但请注意,这将匹配的东西,如 .....等,这可能是或可能不是您想要的。如果您可以更具体地匹配哪种模式,那么正则表达式就会稍微复杂一些。
.....
上面的正则表达式也匹配空字符串。如果您至少需要一个字符,那么重复使用 +(一个或多个)而不是 *(零个或多个)。
+
在任何情况下,您都可以进一步阐明您的规范(在询问正则表达式问题时总是有所帮助) ,但是希望您也可以根据上述信息自己学习如何编写模式。
你可以利用
^[\w.-]+$
+是为了确保它至少有1个字符。需要 ^和 $来表示开始和结束,否则如果字符串在中间有匹配项,比如 @@@@xyz%%%%,那么它仍然是匹配项。
@@@@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]+$
{2,3}
这就是你要找的模式
/^[\w-_.]*$/
这意味着:
0-9
_
如果要限制字符数量:
/^[\w-_.]{0,5}$/
{0,5}表示 0-5字符
{0,5}
0-5