检测 Str 中的透明度值

Detect Transparency Value in Str

如何使用正则表达式检查字符串是否为有效的透明度值(例如 1.00.01)?我尝试了几种方法,但它们都没有正确匹配。

有效范围:[0-1].[01-99]

(?<!\S)\d(?![^.]) 是我目前正在尝试的:

<?php 

$vals = array('1.0','0.3','0.04','10.2','2,2','0.8');

foreach ( $vals as $v ):
    echo (rgbv($v)) ? $v.' is valid<br />' : $v.' is NOT valid<br />';
endforeach;

function rgbv($str) {
    return preg_match('([0-1].\d+)', $str);
}

?>

输出:

1.0 is valid
0.3 is valid
0.04 is valid
10.2 is valid <-- Should be invalid
2,2 is NOT valid
0.8 is valid

您可以试试这个正则表达式。

^(?!.*\.00$|0\.0$)[01]\.\d{1,2}$

DEMO

这个:

~^(?:0|1)\.[0-9]{1,2}$~

其中 ~ 是正则表达式分隔符

而不是 '([0-1].\d+)' 尝试...

'/^(0\.\d{1,2}|1\.0{1,2})$/'

...,使用您的原始代码成功测试...

<?php 

$vals = array('1.0','0.3','0.04','10.2','2,2','0.8');

foreach ( $vals as $v ):
    echo (rgbv($v)) ? $v.' is valid<br />' : $v.' is NOT valid<br />';
endforeach;

function rgbv($str) {
    return preg_match('/^(0\.\d{1,2}|1\.0{1,2})$/', $str);
}

?>

...,根据需要生成以下输出:

1.0 is valid
0.3 is valid
0.04 is valid
10.2 is NOT valid
2,2 is NOT valid
0.8 is valid

你可以test the updated pattern on Ideone.

请注意,您似乎正在测试 CSS opacity alpha values, which should not be greater than 1.0

所以,小数点后最多两位数?小数点有必要吗? 1.00 是最高值吗?您可以尝试以下操作:

(?:^|[^\d.])(0(?:\.\d{0,2})?|1(?:\.0{0,2})?)(?=([^\d.]|$))

唯一的困难是透明度值后跟句点(如结束句子)。此正则表达式将接受以下任何值:

0.00
1.00
0.02
0.04
0.
0
1.
1.0

以下将被拒绝:

2.0
1.01

Please see Regex Demo here.