php正则表达式的最小和最大数字长度

时间:2010-10-24 18:04:35

标签: php regex

if(strlen(trim($steamid)) != 0)
            {
                $regex = "/^STEAM_0:(0|1):[0-9]{1}[0-9]{0,8}$/";
                if(!ereg($regex, $ssteamid)){
                    echo "STEAM ID invalida";
                }
            }

我的问题是这不能正常工作。

STEAM ID最多包含18个字符,最少17个字符。

他们总是从:STEAM_0:

开始

两个真实的例子是:STEAM_0:0:11111111; STEAM_0:1:1111111

另一件事是在STEAM_0之后:总是来一个0或1,如示例中所示。

4 个答案:

答案 0 :(得分:3)

此:

$regex = "/^STEAM_0:(0|1):[0-9]{1}[0-9]{0,8}$/";

可以写得更短:

$regex = "/^STEAM_0:[01]:[0-9]{1,9}$/";

由于您的ID为17或18个字符长,请将正则表达式调整为:

$regex = "/^STEAM_0:[01]:[0-9]{7,8}$/";

最后请注意,自PHP 5.3起,ereg已弃用。此代码段显示您的php /正则表达式preg_match

<?php

$steamid = "STEAM_0:0:11111111";

if(strlen(trim($steamid)) != 0)
{
    $regex = "/^STEAM_0:[01]:[0-9]{7,8}$/";
    if(!preg_match($regex, $steamid))
    {
        echo "STEAM ID invalida.\n";
    } else {
        echo "STEAM ID valida.\n";
    }
}
?>

答案 1 :(得分:0)

如果最小长度是17,最大长度是18,那么你们正在以错误的方式看待这个。 这应该适合你:

$regex = "/^STEAM_0:(0|1):[0-9]{7}[0-9]?$/";

而且,如果有疑问,请使用http://www.regexplanet.com/simple/index.html

等在线正则表达式工具测试您的正则表达式

答案 2 :(得分:0)

试试这个:

$regex = "/^STEAM_0:(0|1):[0-9]{8,9}$/";

匹配:

  • STEAM_0:开头,接着 由
  • a 01,后跟:
  • 8位或9位数字,制作 总字符数17或18

答案 3 :(得分:0)

你应该避免使用ereg()及其相关功能;他们在PHP中已经弃用了很长时间。请改用preg_xx()函数(在这种情况下为preg_match())。

preg_match()和ereg()之间的区别之一是ereg()不希望你包含斜杠字符来开始和结束正则表达式,而preg_match()就是这样。这可能是你的代码不起作用的主要原因:因为你已经包含了斜杠,你使用ereg()将不起作用,但是你切换到preg_match(),同样的表达式应该可以正常工作。

因此,对preg_match()的简单更改应该可以解决您的问题。但是当我在这里时,我可能还建议您可以相当大地缩短正则表达式字符串。尝试这样的事情:

$regex = "/^STEAM_0:[01]:[0-9]{8,9}$/";
if(!preg_match($regex, $ssteamid)) {
    echo "STEAM ID invalid";
}

希望有所帮助。