首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最小和最大数字长度的php正则表达式

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

Stack Overflow用户
提问于 2010-10-25 02:04:35
回答 4查看 2.7K关注 0票数 2
代码语言:javascript
复制
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,就像示例中演示的那样。

EN

回答 4

Stack Overflow用户

发布于 2010-10-25 02:09:43

这一点:

代码语言:javascript
复制
$regex = "/^STEAM_0:(0|1):[0-9]{1}[0-9]{0,8}$/";

可以写得更短,如:

代码语言:javascript
复制
$regex = "/^STEAM_0:[01]:[0-9]{1,9}$/";

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

代码语言:javascript
复制
$regex = "/^STEAM_0:[01]:[0-9]{7,8}$/";

最后,请注意,从PHP5.3开始,ereg已被弃用。这段代码显示了使用preg_match的php/正则表达式

代码语言:javascript
复制
<?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";
    }
}
?>
票数 3
EN

Stack Overflow用户

发布于 2010-10-25 02:14:13

如果最小长度是17,最大长度是18,那么你们看错了。这将为您做好这项工作:

代码语言:javascript
复制
$regex = "/^STEAM_0:(0|1):[0-9]{7}[0-9]?$/";

此外,如果有疑问,可以使用一些在线正则表达式工具(如http://www.regexplanet.com/simple/index.html )测试您的正则表达式

票数 0
EN

Stack Overflow用户

发布于 2010-10-25 02:16:20

试试这个:

代码语言:javascript
复制
$regex = "/^STEAM_0:(0|1):[0-9]{8,9}$/";

它匹配:

开头为

  • STEAM_0:,然后是
  • a 01,然后是:,然后是
  • (8位或9位),使字符总数变为17或18
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4009593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档