diff --git a/src/validators/crypto_addresses/btc_address.py b/src/validators/crypto_addresses/btc_address.py index a23a071d..f781f3b9 100644 --- a/src/validators/crypto_addresses/btc_address.py +++ b/src/validators/crypto_addresses/btc_address.py @@ -50,7 +50,7 @@ def btc_address(value: str, /): return ( # segwit pattern - re.compile(r"^(bc|tb)[0-3][02-9ac-hj-np-z]{14,74}$").match(value) + re.compile(r"^(bc|tb)[0-3][02-9ac-hj-np-z]{14,74}$").fullmatch(value) if value[:2] in ("bc", "tb") else _validate_old_btc_address(value) ) diff --git a/src/validators/crypto_addresses/eth_address.py b/src/validators/crypto_addresses/eth_address.py index 6e9561c5..1d259ad0 100644 --- a/src/validators/crypto_addresses/eth_address.py +++ b/src/validators/crypto_addresses/eth_address.py @@ -59,6 +59,6 @@ def eth_address(value: str, /): if not value: return False - return re.compile(r"^0x[0-9a-f]{40}$|^0x[0-9A-F]{40}$").match( + return re.compile(r"^0x[0-9a-f]{40}$|^0x[0-9A-F]{40}$").fullmatch( value ) or _validate_eth_checksum_address(value) diff --git a/tests/crypto_addresses/test_complete_addresses.py b/tests/crypto_addresses/test_complete_addresses.py new file mode 100644 index 00000000..362d2d5c --- /dev/null +++ b/tests/crypto_addresses/test_complete_addresses.py @@ -0,0 +1,25 @@ +"""Require complete BTC and ETH addresses.""" + +from typing import Callable + +import pytest + +from validators import ValidationError, btc_address, eth_address + + +@pytest.mark.parametrize( + "validate,value", + [ + (btc_address, "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq"), + (btc_address, "tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx"), + (eth_address, "0x9cc14ba4f9f68ca159ea4ebf2c292a808aaeb598"), + (eth_address, "0x9CC14BA4F9F68CA159EA4EBF2C292A808AAEB598"), + ], +) +@pytest.mark.parametrize("suffix", ["", "\n", "\r\n", " ", "\nextra"]) +def test_complete_address(validate: Callable[[str], object], value: str, suffix: str): + """Accept the address alone and reject trailing characters.""" + if suffix: + assert isinstance(validate(value + suffix), ValidationError) + else: + assert validate(value) is True