【Flutter】【WEB3】判断一个String是不是钱包地址-代码实现

时间:2025-02-07 10:15:00

extension BlockchainValidator on String {

  /// 判断是否是以太坊地址(ETH)
  bool get isEthereumAddress {
    final ethRegExp = RegExp(r'^0x[a-fA-F0-9]{40}$');
    return ethRegExp.hasMatch(this);
  }

  /// 判断是否是比特币地址(BTC)
  bool get isBitcoinAddress {
    final btcRegExp = RegExp(r'^(1|3|bc1)[a-zA-HJ-NP-Z0-9]{25,39}$');
    return btcRegExp.hasMatch(this);
  }

  /// 判断是否是 Solana 地址(SOL)
  bool get isSolanaAddress {
    final solRegExp = RegExp(r'^[1-9A-HJ-NP-Za-km-z]{32,44}$');
    return solRegExp.hasMatch(this);
  }

  /// 判断是否是 TRON 地址(TRX)
  bool get isTronAddress {
    final tronRegExp = RegExp(r'^T[a-zA-HJ-NP-Z0-9]{33}$');
    return tronRegExp.hasMatch(this);
  }

  /// 通用方法:检查一个地址属于哪种区块链
  bool get isBlockchainAddress {
    return isEthereumAddress || isBitcoinAddress || isSolanaAddress || isTronAddress;
  }

}

使用事例:

final String result = await Get.toNamed(RouterManifest.walletScanPage);
if (result.isBlockchainAddress) {
	 _paymentAddressController?.text = result;
} else {
	_paymentAddressController?.text = "";
	toastError("不是有效的钱包地址");
}