我有一个PHP应用程序,其中有一个Play商店应用程序数据,我想检查获取的数据是否是版本号。
版本号可以是0.0.1
至99.99.99
,否则我可能对版本号限制有误。
如何正确使用正则表达式来处理这项工作?
这是我目前的操作方式:
$list = ["hello", "0.23.2", "world"];
foreach($list as $l) {
if (checkIfValidVersion($l)) {
echo "valid version!";
}
}
function checkIfValidVersion ($someString) {
$split = explode(".", $someString);
$isValid = false;
foreach($split as $s) {
$isValid = is_numeric($s) ? true : false;
}
return $isValid;
}
答案 0 :(得分:4)
简单的正则表达式为\d+\.\d+\.\d+
。
对于php,您可以使用preg_match。在此链接上查看示例。
p.s。这不是严格的检查,例如版本应至少为0.0.1或最大值应为99.99.99。它只是检查如下所示的模式。
<number><dot><number><dot><number><dot>
答案 1 :(得分:3)
假设作为问题中的示例,您只想精确匹配3组数字(假设它们只能是仅包含0-9的2位数字),请检查我的解决方法here
[0-9]{1,2}\.[0-9]{1,2}\.?[0-9]{1,2}
但是,这有一些问题,因为它不能用于少于3组数字,现在,如果Play商店不允许这样做,那就太好了,但是请注意,使用上述正则表达式版本号(例如1.0和1.1不匹配
答案 2 :(得分:3)
使用:
^(\d?\d)\.(\d?\d)\.(\d?\d)$
该正则表达式将匹配由点分隔的三组1或2位数字。最好将^
和$
与preg_match
一起使用,以确保它将匹配整个字符串,而不匹配包含版本部分的字符串,例如something1.0.0something
。
示例:
preg_match("/^(\d?\d)\.(\d?\d)\.(\d?\d)$/", "1.0.0"); // Match
preg_match("/^(\d?\d)\.(\d?\d)\.(\d?\d)$/", "99.99.99"); // Match
preg_match("/^(\d?\d)\.(\d?\d)\.(\d?\d)$/", "99.699.99"); // Not match
答案 3 :(得分:2)
如果您想实施0.0.1
的下限,则可以使用:
<?php
function is_valid_version( $version )
{
// Assume the input is invalid
$return = false;
// Make sure we can explode() the input
if( is_scalar( $version ) )
{
// Explode on periods
$version = explode( '.', (string)$version );
// We should have exactly items
if( count( $version ) === 3 )
{
// All three items should be digits
if(
ctype_digit( $version[ 0 ] ) &&
ctype_digit( $version[ 1 ] ) &&
ctype_digit( $version[ 2 ] )
)
{
// At least one digit needs to not be zero
// 0.0.0 should be invalid
// If you want the upper limit to be 99.99.99 then this is where you should do it
if(
(int)$version[ 0 ] !== 0 ||
(int)$version[ 1 ] !== 0 ||
(int)$version[ 2 ] !== 0
)
{
$return = true;
}
}
}
}
return $return;
}
var_dump( is_valid_version( '1.2.3' ) ); // true
var_dump( is_valid_version( '0.0.0' ) ); // false
var_dump( is_valid_version( '0.0.1' ) ); // true
var_dump( is_valid_version( '0.1.0' ) ); // true
var_dump( is_valid_version( '100.53456.fgdf' ) ); //false
var_dump( is_valid_version( array() ) ); //false
答案 4 :(得分:1)
如果仅爆炸点(.
),则每个项目的最大长度限制为2。
$version = "25.22.01";
$bool = true;
foreach(explode(".", $version) as $part) {
if(strlen($part) > 2) {
$bool = false;
}
}
// Expected result: "true"
var_dump($bool);
这是3v4l.org上的一个有效示例。
答案 5 :(得分:1)
对于shyammakwana.me的答案,我建议使用:
\d{1,2}\.\d{1,2}\.\d{1,2}
因为+
加修饰符在默认情况下是贪婪的,并且会匹配:
9999323.32532553.893588972350897327
以及:
1.1.1
使用花括号可以使您更加具体,并确定指定版本的格式是否正确。
如果愿意,您可以摆脱第二个数字,而只需使用{1,}
来匹配一个或多个数字。