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,如示例中所示。
答案 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:
开头,接着
由0
或1
,后跟:
,
答案 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";
}
希望有所帮助。