Php 如何确认字符串是整数的有效base36?

Php 如何确认字符串是整数的有效base36?,php,base36,Php,Base36,我有这样的代码: $alias = 'myalias'; echo "<pre>"; echo " ALIAS: $alias ROUND: ", intval($alias, 36) , "\n" , "AGAIN: ", base_convert(intval($alias, 36), 10, 36) ; echo "<hr>"; $alias = '27xk3q'; echo "<pre>"; echo " ALIAS: $alias ROUND:

我有这样的代码:

$alias = 'myalias';
echo "<pre>";
echo "
ALIAS: $alias
ROUND: ", intval($alias, 36) , "\n" ,
"AGAIN: ", base_convert(intval($alias, 36), 10, 36)
;

echo "<hr>";

$alias = '27xk3q';
echo "<pre>";
echo "
ALIAS: $alias
ROUND: ", intval($alias, 36) , "\n" ,
"AGAIN: ", base_convert(intval($alias, 36), 10, 36)
;
但是当我把它上传到我的Linux服务器上时,它会回应不同的东西

正如您所看到的,“
myalias
”字符串在Linux版本的PHP中打印出来

如果这不起作用或是错误的代码,我需要知道一种简单的方法来检查字符串是否是有效的base36版本的整数

谢谢

正如您所看到的,“myalias”字符串在Linux版本的PHP中打印出来

这是正确的行为。您在mac电脑上获得另一个结果-因为它是32位的,您的号码被截断为
2147483647
2^32-1


您遇到的问题是,您的一台计算机正在使用32位有符号整数(第一台),另一台计算机正在使用64位有符号整数(或可能更大)进行
intval
转换。[有关范围,请参见文档。]

myalias
从Base36转换的值超过0x7FFFFFFF(最大有符号32位值),而64位有符号整数(0xba204c1e4==49962861028)则完全相同。因此,您认为“坏掉的”(linux版本)实际上是正确的版本。第一个因溢出而无法工作


0-9a-z
chars组成的每个字符串都是有效的Base36数字。唯一可以做的检查是检查字符串中的所有字符是否在有效范围内(并检查溢出(测试返回的值是否为最大int)-不可靠)。

这看起来像是我陷入了困境。我继承了一个数据库,以前的程序员认为将序列的base36版本用作表中的主键是个好主意。他没有保存相应的整数。应用程序的编程方式是,此列默认为自动字符串(关联序列的base36),但用户可以选择输入自定义字符串。我现在需要区分哪些是自动转换成base36字符串等价物的整数,哪些是用户输入的自定义字符串。有什么想法吗?谢谢@亨特:嗯,我不认为你说的是0-9a-z而不是1-9a-z
ALIAS: myalias
ROUND: 2147483647
**AGAIN: zik0zj**

ALIAS: 27xk3q
ROUND: 134255366
AGAIN: 27xk3q
ALIAS: myalias
ROUND: 49962861028
**AGAIN: myalias**

ALIAS: 27xk3q
ROUND: 134255366
AGAIN: 27xk3q
if (preg_match('~^[a-z\d]+$~', $string)) {
    // valid base36
}