2017-07-08 17 views
2

ねえ、私はgethを初めて使っています。

私はgethサーバーと対話するためにjsonでPHPとカールを使用しています。

1つのことを除いて、私が望むことはすべて実行できます:ユーザー入力アドレスがethereum wallet形式で有効かどうかを確認してください。

ここではJavaScript関数(https://ethereum.stackexchange.com/questions/1374/how-can-i-check-if-an-ethereum-address-is-valid#1379)を見ましたが、私は主にPHPを使用しています.JSにはまったく関わっていません。

変換する方法はありますか?

+1

また、@RiggsFolly私は、変換を求めていないよ一般的なアルゴリズムを読んで(それは一般的にチェックされているか)とPHP –

+0

でそれを書き、私は学ぶことを愛し、私はとても素敵な場所だと思います。私はあなたが知っている質問にも答えますか? – btc4cash

+0

PHPでethereum/regex検証に関する建設的な答えを提供できますか? – btc4cash

答えて

7

基本的には、JavaScriptを完全にPHPに変換することができます。 ここで私は変換し、PHPのethereumアドレスを検証するためのコードをテストすることができました。

/** 
* Checks if the given string is an address 
* 
* @method isAddress 
* @param {String} $address the given HEX adress 
* @return {Boolean} 
*/ 
function isAddress($address) { 
    if (!preg_match('/^(0x)?[0-9a-f]{40}$/i',$address)) { 
     // check if it has the basic requirements of an address 
     return false; 
    } elseif (!preg_match('/^(0x)?[0-9a-f]{40}$/',$address) || preg_match('/^(0x)?[0-9A-F]{40}$/',$address)) { 
     // If it's all small caps or all all caps, return true 
     return true; 
    } else { 
     // Otherwise check each case 
     return isChecksumAddress($address); 
    } 
} 

/** 
* Checks if the given string is a checksummed address 
* 
* @method isChecksumAddress 
* @param {String} $address the given HEX adress 
* @return {Boolean} 
*/ 
function isChecksumAddress($address) { 
    // Check each case 
    $address = str_replace('0x','',$address); 
    $addressHash = hash('sha3',strtolower($address)); 
    $addressArray=str_split($address); 
    $addressHashArray=str_split($addressHash); 

    for($i = 0; $i < 40; $i++) { 
     // the nth letter should be uppercase if the nth digit of casemap is 1 
     if ((intval($addressHashArray[$i], 16) > 7 && strtoupper($addressArray[$i]) !== $addressArray[$i]) || (intval($addressHashArray[$i], 16) <= 7 && strtolower($addressArray[$i]) !== $addressArray[$i])) { 
      return false; 
     } 
    } 
    return true; 
} 

一方、イーサリアムアドレスの有効性をチェックするための非常に単純な正規表現を探して誰かのために(使用する例えばHTMLフィールドのパターン属性としてある)、この正規表現は十分です。

^(0x)?[0-9a-fA-F]{40}$ 
+0

ありがとう!私は今jqueryとweb3.jsを使用してweb3.isAddress()を使用できます:) – btc4cash

関連する問題