12

I am building an application which requires user to paste the transaction hash of a transaction. But i want a regex string i could pass to the pattern attribute of the input element that receives it to validate it. What is the general regexp that validates ethereum transaction hash?

Richard Horrocks
  • 37,835
  • 13
  • 87
  • 144
Oluwatumbi
  • 223
  • 1
  • 2
  • 6

3 Answers3

15

This regex should do the trick:

/^0x([A-Fa-f0-9]{64})$/

Jesbus
  • 10,478
  • 6
  • 35
  • 62
  • Keep in mind this only validates if the search contains only the right characters in the right length, not if a transaction exists on the blockchain. – Nick Dec 24 '17 at 17:38
  • @Nick this is clear. Thats just what i want – Oluwatumbi Dec 25 '17 at 15:04
  • 1
    I accepted the answer but i will rather go for /^(0x)?([A-Fa-f0-9]{64})$/ because it is also valid incase the source is from some of those who don't include the 0x prefix. Or do you think that should be considered invalid? The API i use to query the transactions accepts transaction IDs without the 0x – Oluwatumbi Dec 25 '17 at 15:06
  • How can we implement this in Python? – alper Oct 08 '21 at 17:35
2

As you didn't specify the technology you are using, I would suggest validating it against the go-ethereum hexutil https://github.com/ethereum/go-ethereum/blob/master/common/hexutil/hexutil.go#L60

Here's a simple example written in golang:

// IsValid : validates transaction with go-ethereum utils
func (model *Transaction) IsValid() bool {
    _, err := hexutil.Decode(model.Hash)
    return err == nil
}
Gus
  • 341
  • 2
  • 6
2

btw, if you want to validate an address instead of a transaction, the following regex does it:

/^0x[a-fA-F0-9]{40}$/

Mati
  • 121
  • 3