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?
-
Possible duplicate of How can I check if an Ethereum address is valid?– Richard HorrocksCommented Dec 24, 2017 at 14:13
-
3@RichardHorrocks It's not a duplicate; this question is about the transaction hash, not the address. I don't see a regex for the transaction hash in that answer.– JesbusCommented Dec 24, 2017 at 14:16
-
Ah, sorry, you're right :-) I read "regex" and ignored everything else :-) Removed duplicate vote.– Richard HorrocksCommented Dec 24, 2017 at 14:18
Add a comment
|
3 Answers
This regex should do the trick:
/^0x([A-Fa-f0-9]{64})$/
-
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.– NickCommented Dec 24, 2017 at 17:38
-
-
1I 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 Commented Dec 25, 2017 at 15:06
-
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
}
btw, if you want to validate an address instead of a transaction, the following regex does it:
/^0x[a-fA-F0-9]{40}$/