我有一个10位数的字符串传递给我,我想验证它是一个有效的ASIN之前,做更多的处理和/或重定向。我知道一个非ISBN ASIN将总是非数字和10个字符的长度我只是想能够告诉如果项目正在传递是一个有效的ASIN或它只是一个搜索字符串后,我已经消除了它可能是一个ISBN。例如,“SOUNDBOARD”是一个搜索项,而“B 000 J5 XS 3C”是一个ASIN,“1412775884”是一个ISBN。有没有轻量级的方法来检查ASIN?
oyjwcjzk1#
@Leonid评论说他找到了ASIN BT00LLINKI。虽然ASIN看起来并不是严格递增的,但是最老的非ISBN ASIN确实比新的ASIN有更多的零。也许我们不可避免地会看到没有零填充的ASIN(然后呢,我想知道......)。因此,我们现在要查找“B”后跟九个字母数字字符(或ISBN)-不幸的是,那个零的“丢失”使得得到假阳性变得容易得多。
BT00LLINKI
/^(B[\dA-Z]{9}|\d{9}(X|\d))$/
在Javascript中,我使用下面的regexp来确定字符串是否是ASIN或者是否包含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])$/
正如其他人所提到的,Amazon并没有真正透露ASIN的规格,但实际上我只看到了ASIN的两种可能格式:
vyswwuz22#
对于PHP,ASIN here有一个有效的正则表达式。
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; }
kuarbcqp3#
也许你可以在亚马逊网站上查一下ASIN是否存在。http://www.amazon.com/dp/YOUR10DIGITASIN当产品存在时,此URL返回http-statuscode=200,如果不是有效的ASIN,则返回404。
zazmityj4#
在尝试了几个解决方案(包括投票最多的答案)后,它们在PHP中不能很好地工作。(例如8619203011显示为ASIN)下面是非常有效的解决方案:
function isAsin($string){ $ptn = "/^(?i)(B0|BT)[0-9A-Z]{8}$/"; if (preg_match($ptn, $string, $matches)) { return true; } } $testAsins = array('k023l5bix8', 'bb03l5bix8', 'b143l5bix8', 'bt00plinki', ' ', ''); foreach ($testAsins as $testAsin) { if(isAsin($testAsin)){ echo $testAsin." is ASIN"."<br>"; } else { echo $testAsin." is NOT ASIN"."<br>"; } }
说明:
/^(?i)(B0|英国电信)[0-9A-Z]{8}美元//^ =开始(?i)=不区分大小写(B0|BT)=从B 0或BT开始[0-9A-Z]=任何数字或字母{8}允许= 8个数字或字母(在B 0或BT的+2之上)
4条答案
按热度按时间oyjwcjzk1#
更新,2017年
@Leonid评论说他找到了ASIN
BT00LLINKI
。虽然ASIN看起来并不是严格递增的,但是最老的非ISBN ASIN确实比新的ASIN有更多的零。也许我们不可避免地会看到没有零填充的ASIN(然后呢,我想知道......)。因此,我们现在要查找“B”后跟九个字母数字字符(或ISBN)-不幸的是,那个零的“丢失”使得得到假阳性变得容易得多。
原始答案
在Javascript中,我使用下面的regexp来确定字符串是否是ASIN或者是否包含ASIN:
或者,无需担心额外的空白或捕获:
正如其他人所提到的,Amazon并没有真正透露ASIN的规格,但实际上我只看到了ASIN的两种可能格式:
1.字母B后跟两位数字,再后跟七个ASCII范围的字母数字字符(字母字符为大写)。
如果有人遇到了不符合这种模式的ASIN,请插话。实际上可能会有比这更严格的限制,但我不确定。非ISBN ASIN可能只使用字母字符的子集,但即使如此,他们也会使用其中的大多数字符。有些似乎比其他字符出现得更频繁,至少(K,Z,Q,W...)
vyswwuz22#
对于PHP,ASIN here有一个有效的正则表达式。
kuarbcqp3#
也许你可以在亚马逊网站上查一下ASIN是否存在。
http://www.amazon.com/dp/YOUR10DIGITASIN
当产品存在时,此URL返回http-statuscode=200,如果不是有效的ASIN,则返回404。
zazmityj4#
在尝试了几个解决方案(包括投票最多的答案)后,它们在PHP中不能很好地工作。(例如8619203011显示为ASIN)
下面是非常有效的解决方案:
说明:
/^(?i)(B0|英国电信)[0-9A-Z]{8}美元/
/^ =开始
(?i)=不区分大小写
(B0|BT)=从B 0或BT开始
[0-9A-Z]=任何数字或字母
{8}允许= 8个数字或字母(在B 0或BT的+2之上)