if($colour &&
((strlen($colour) == 7 && preg_match("/#[0-9a-fA-F]{6}/",$colour)) ||
(strlen($colour) == 4 && preg_match("/#[0-9a-fA-F]{3}/",$colour)))) {
(字符串长度包括hash
,因此3& 6变为4& 7)
答案 0 :(得分:1)
是的,有。如果你使用RegEx,你也可以使用一个正则表达式,就像这样。通过使用字符串 anchors 的start或string / end,也可以跳过长度。
if ($colour && preg_match("/^#([0-9a-fA-F]){3}(([0-9a-fA-F]){3})?$/", $colour)
{
}
我认为可以跳过“检查价值”,但这可能是一种优化。
[编辑]
结果证明是RegEx cheat sheet上的一个例子。
答案 1 :(得分:1)
让正则表达式通过添加字符串的^和$ signs信号开始/结束并组合正则表达式来检查字符串的长度:
if (preg_match("/^#[0-9a-fA-F]{3}|#[0-9a-fA-F]{6}$/", $colour)) {
答案 2 :(得分:1)
if (preg_match("/^#([0-9a-f]{3}){1,2}$/i", $colour)) {
对我来说似乎足够了。
答案 3 :(得分:0)
您可以使用^
和$
来锚定正则表达式,这样就隐含了长度。
if( $colour &&
( preg_match("/^#[0-9a-fA-F]{6}$/",$colour)
|| preg_match("/^#[0-9a-fA-F]{3}$/",$colour)
) ) {
我不太了解php,但在perl中你需要将$
转义为\$
或使用单引号代替。
答案 4 :(得分:-1)
您的正则表达式已经指定了蜇伤长度,因此如果您设置了开始^
并结束$
边界,则无需进行检查:
if ( preg_match("/^#[0-9a-fA-F]{6}$/", $colour) || preg_match("/^#[0-9a-fA-F]{3}$/",$colour) ) {}