RegEx для соответствия адресам Bitcoin?

Я пытаюсь найти регулярное выражение для соответствия адресам Bitcoin в соответствии с этими спецификациями:

Биткойн-адрес или просто адрес - это идентификатор 27-34 буквенно-цифровые символы, начиная с номера 1 или 3 [...]

Я подумал, что это будет выглядеть примерно так.

/^[13][a-zA-Z0-9]{27,34}/

Дело в том, что я плохо разбираюсь в регулярных выражениях, и я не нашел ни одного источника, подтверждающего, что это не создаст ложных негативов.

Я нашел один онлайн, который ^1[1-9A-Za-z][^OIl]{20,40}, но я даже не знаю, что означает часть [^OIl], и похоже, что он не соответствует 3, с которого может начинаться биткойн-адрес.

Ответ 1

[^OIl] соответствует любому символу, который не является O, я или l. Проблемы в вашем регулярном выражении:

  • У вас нет $ в конце, поэтому он будет соответствовать любой строке, начинающейся с адреса BC.
  • Вы не считали первый символ в {27,34}, который должен быть {26,33}

Однако, как упоминалось в комментарии, регулярное выражение не является хорошим способом проверки адреса биткойна.

Ответ 2

^[13][a-km-zA-HJ-NP-Z1-9]{25,34}$

будет соответствовать строке, начинающейся с 1 или 3, и после этого содержит от 26 до 33 символов либо az, AZ, 0-9, за исключением O, I и l (недопустимые символы в адресе Bitcoin).

Ответ 3

^[13][a-km-zA-HJ-NP-Z1-9]{25,34}$

биткойн-адрес

  • идентификатор 26-35 буквенно-цифровых символов
  • начиная с номера 1 или 3
  • случайные цифры
  • прописные буквы
  • строчные буквы
  • за исключением того, что заглавная буква O, прописная буква I, строчная буква l, а число 0 никогда не используется для предотвращения визуальной двусмысленности.

Ответ 4

^(bc1|[13])[a-zA-HJ-NP-Z0-9]{25,39}$

На основе нового типа адреса Bech32

Ответ 5

Основываясь на описании здесь: https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki Я бы сказал, что регулярное выражение для адреса биткойнов Bech32 для Версии 1 и Версии 0 (только для основной сети):

\bbc(0([ac-hj-np-z02-9]{39}|[ac-hj-np-z02-9]{59})|1[ac-hj-np-z02-9]{8,87})\b

Вот некоторые другие ссылки, где я нашел информацию:

Ответ 6

Поскольку ОП не предоставил конкретный вариант использования (только соответствующие критерии), и я столкнулся с этим при исследовании методов обнаружения адресов BitCoin, хотел отправить ответ и поделиться с сообществом.

Эти предоставленные RegEx найдут адреса BitCoin либо в начале строки, и/или в конце строки. Мой вариант использования состоял в том, чтобы найти адреса BitCoin в теле письма с учетом роста шантажа/сексторции (ссылка: https://krebsonsecurity.com/2018/07/sextortion-scam-uses-recipients-hacked-passwords/) - таким образом, это не были эффективные решения (как обрисовано в общих чертах позже). Предлагаемый RegEx будет ловить много FP в электронной почте, из-за имен файлов и других идентификаторов в URL. Я не выбиваю решения, так как они работают для определенных вариантов использования, но они просто не работают для меня. Один вариант перехватил много спам-писем за короткий промежуток времени пассивного оповещения (примеры приведены ниже).

Вот мои тесты:

--------------------------------------------------------
BitCoin blackmail formats observed (my org and online):
--------------------------------------------------------
BTC Address: 1JHwenDp9A98XdjfYkHKyiE3R99Q72K9X4 
BTC Address: 1Unoc4af6gCq3xzdDFmGLpq18jbTW1nZD
BTC Address: 1A8Ad7VbWDqwmRY6nSHtFcTqfW2XioXNmj
BTC Address: 12CZYvgNZ2ze3fGPFzgbSCELBJ6zzp2cWc
BTC Address: 17drmHLZMsCRWz48RchWfrz9Chx1osLe67

Receiving Bitcoin Address: 15LZALXitpbkK6m2QcbeQp6McqMvgeTnY8
Receiving Bitcoin Address: 1MAFzYQhm6msF2Dxo3Nbox7i61XvgQ7og5

--------------------------------------------------------
Other possible BitCoin test cases I added:
--------------------------------------------------------
- What if text comes before and/or after on same line?  Or doesn't contain BitCoin/BTC/etc. anywhere (or anywhere close to the address)?
    Send BitCoin payments here 1MAFzYQhm6msF2Dxo3Nbox7i61XvgQ7og5
    1MAFzYQhm6msF2Dxo3Nbox7i61XvgQ7og5 to keep your secrets safe.
    Send payments here 1MAFzYQhm6msF2Dxo3Nbox7i61XvgQ7og5 to keep your secrets safe.

- Standalone address:
    1Dvd7Wb72JBTbAcfTrxSJCZZuf4tsT8V72

--------------------------------------------------------
Redacted Body content generating FPs from spam emails:
--------------------------------------------------------
src=3D"https://example.com/blah=3D2159024400&t=3DXWP9YVkAYwkmif9RgKeoPhw2b1zdMnMzXZSGRD_Oxkk"

"cursor:pointer;color:#6A6C6D;-webkit-text-size-blahutm_campaign%253Drdboards%2526e_t%253Dd5c2deeaae5c4a8b8d2bff4d0f87ecdd%2526utm_cont=blah

src=3D"https://example.com/blah/74/328e74997261d5228886aab1a2da6874.jpg" 

src=3D"https://example.com/blah-1c779f59948fc5be8a461a4da8d938aa.jpg"

href=3D"https://example.com/blah-0ff3169b28a6e17ae8a369a3161734c1?alert_=id=blah

Некоторые образцы RegEx, которые я тестировал (не буду перечислять те, которые я бы выбил из-за жадных шаров с обратными следами):

^[13][a-km-zA-HJ-NP-Z1-9]{25,34}$
[13][a-km-zA-HJ-NP-Z1-9]{25,34}$
    (Too narrow and misses BitCoin addresses within a paragraph)

(bc1|[13])[a-zA-HJ-NP-Z0-9]{25,39}$
    (Still misses text after BTC on same line and triples execution time)

\W[13][a-km-zA-HJ-NP-Z1-9]{25,34}\W
    (Too broad and catches URL formats)

Текущий RegEx, который я оцениваю, отлавливает все мои известные/специально созданные примеры и исключает известные FP (в частности, избегая периода конца предложения для FP с именами файлов URL):

[13][a-km-zA-HJ-NP-Z1-9]{25,34}\s

Одна контрольная точка для времени выполнения (показывает стоимость в шагах и времени): https://regex101.com/

Пожалуйста, не стесняйтесь взвешивать или давать предложения по улучшению (я ни в коем случае не владелец RegEx). В дальнейшем, проверяя обнаружение содержимого тела по электронной почте, я сообщу, будут ли обнаружены другие случаи FP или получен более эффективный RegEx.

Сет

Ответ 7

Я Али Мизани Оскуи, исследователь, новатор и футурист, который увлечен миром криптовалюты и блокчейна. Я начал свой собственный бизнес в 1999 году (когда мне было 24 года), основав CITEX Co., специализирующейся на разработке программного обеспечения для автоматизации делопроизводства, систем учета времени и посещаемости и систем автоматизации ресторанов.