确定 10 位字符串是否有效 亚马逊 ASIN更新, 2017原始答案

2022-08-31 00:24:49

我有一个 10 位数的字符串被传递给我,我想在进行更多处理和/或重定向之前验证它是否是有效的 ASIN。

我知道非 ISBN ASIN 将始终是非数字且长度为 10 个字符

我只是希望能够判断所传递的项目是否是有效的ASIN,或者它只是一个搜索字符串,因为我已经消除了它可能是ISBN。

例如,“音板”是搜索词,而“B000J5XS3C”是 ASIN,“1412775884”是 ISBN。

有没有一种轻量级的方法来检查ASIN?


答案 1

更新, 2017

@Leonid评论说,他找到了ASIN。BT00LLINKI

虽然 ASIN 似乎不是严格递增的,但最古老的非 ISBN ASIN 往往比较新的 ASIN 具有更多的零。也许不可避免的是,我们开始看到没有零填充的ASIN(然后呢,我想知道......)。因此,我们现在正在寻找“B”,后跟九个字母数字字符(或ISBN) - 不幸的是,该零的“丢失”使得获得误报变得更加容易。

/^(B[\dA-Z]{9}|\d{9}(X|\d))$/

原始答案

在Javascript中,我使用以下正则表达式来确定字符串是否为或包含看似ASIN的内容:

/^\s*(B\d{2}[A-Z\d]{7}|\d{9}[X\d])\s*$/

或者,无需担心额外的空格或捕获:

/^(B\d{2}[A-Z\d]{7}|\d{9}[X\d])$/

正如其他人所提到的,亚马逊并没有真正透露这个规格。不过,在实践中,我只看到了ASIN的两种可能格式:

  1. 10 位 ISBN,即 9 位数字 + 最后一个字符(可以是数字或“X”)。
  2. 字母 B 后跟两位数字,后跟七个 ASCII 范围的字母数字字符(字母字符为大写)。

如果有人遇到不符合该模式的 ASIN,请加入。实际上,有可能比这更严格的限制,但我不确定。非 ISBN ASIN 可能只使用字母字符的子集,但即便如此,它们也会使用其中的大多数。有些人似乎比其他人出现得更频繁,至少(K,Z,Q,W...)


答案 2

对于 PHP,这里有一个有效的 ASIN 正则表达式。

function isAsin($string){
    $ptn = "/B[0-9]{2}[0-9A-Z]{7}|[0-9]{9}(X|0-9])/";
    return preg_match($ptn, $string, $matches) === 1;
}

推荐