簡體   English   中英

確定 10 位字符串是否為有效的亞馬遜 ASIN

[英]Determine if 10 digit string is valid Amazon ASIN

我有一個 10 位數的字符串傳遞給我,我想在進行更多處理和/或重定向之前驗證它是否是有效的 ASIN。

我知道非 ISBN ASIN 將始終為非數字且長度為 10 個字符

我只想知道傳遞的項目是有效的 ASIN 還是只是一個搜索字符串,在我已經消除了它可能是 ISBN 之后。

例如,“SOUNDBOARD”是一個搜索詞,而“B000J5XS3C”是一個 ASIN,而“1412775884”是一個 ISBN。

有沒有一種輕量級的方法來檢查 ASIN?

更新,2017

@Leonid 評論說他找到了 ASIN BT00LLINKI

盡管 ASIN 似乎不是嚴格遞增的,但最舊的非 ISBN ASIN 確實比新 ASIN 具有更多的零。 也許我們不可避免地會開始看到沒有零填充的 ASIN(然后呢,我想知道......)。 所以我們現在正在尋找后跟九個字母數字字符(或 ISBN)的“B”——不幸的是,“丟失”零使得更容易得到誤報。

/^(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...)

對於PHP,對於ASINs一個有效的正則表達式在這里

 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; }

也許您可以在亞馬遜網站上檢查 ASIN 是否存在。

http://www.amazon.com/dp/YOUR10DIGITASIN

當產品存在時,此 URL 返回 http-statuscode=200,如果它不是有效的 ASIN,則返回 404。

在嘗試了幾個解決方案(包括投票最高的答案)后,它們在 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|BT)[0-9A-Z]{8}$/

/^ = 開始

(?i) = 不區分大小寫

(B0|BT)= 以 B0 或 BT 開頭

[0-9A-Z]= 任何數字或字母

{8} = 允許 8 個數字或字母(在 B0 或 BT 的 +2 之上)

我有一個10位數字的字符串傳遞給我,我想在執行更多處理和/或重定向之前確認它是有效的ASIN。

我知道非ISBN ASIN將始終為非數字且長度為10個字符

我只是想知道傳遞的項目是一個有效的ASIN還是只是一個搜索字符串(在我已經消除了它可能是一個ISBN之后)。

例如,“ SOUNDBOARD”是搜索詞,而“ B000J5XS3C”是ASIN,而“ 1412775884”是ISBN。

有一種輕巧的方法來檢查ASIN嗎?

我有一個10位數字的字符串傳遞給我,我想在執行更多處理和/或重定向之前確認它是有效的ASIN。

我知道非ISBN ASIN將始終為非數字且長度為10個字符

我只是想知道傳遞的項目是一個有效的ASIN還是只是一個搜索字符串(在我已經消除了它可能是一個ISBN之后)。

例如,“ SOUNDBOARD”是搜索詞,而“ B000J5XS3C”是ASIN,而“ 1412775884”是ISBN。

有一種輕巧的方法來檢查ASIN嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM