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., специализирующейся на разработке программного обеспечения для автоматизации делопроизводства, систем учета времени и посещаемости и систем автоматизации ресторанов.