2014-02-10 1 views
22

Я пытаюсь придумать регулярное выражение, чтобы соответствовать Bitcoin адреса в соответствии с these specs:RegEx для соответствия адресам Bitcoin?

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

Я полагал, что это будет выглядеть как этот

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

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

Я нашел один в Интернете, что это ^1[1-9A-Za-z][^OIl]{20,40}, но я даже не знаю, что [^OIl] средства часть, и это, кажется, не соответствовать 3 Bitcoin адрес может начаться с.

+6

Ваша ссылка страница содержит раздел «Адрес проверки». Почему бы не использовать технику, предусмотренную в ссылке там? (Цитата: "[...] рекомендуется использовать метод из [этой темы] (https://bitcointalk.org/index.php?topic=1026.0), а не просто проверять длину строки, допустимые символы или, что адрес начинается с 1 или 3 ") – phimuemue

+1

@phimuemue Если адреса _all_ bitcoin имеют этот формат, то я не вижу причины, почему это не сработает. Кроме того, я не ищу тщательной проверки (в конце концов, это может быть действительный адрес и еще не существует), а скорее то, что отбрасывает адреса, которые явно недействительны. – federicot

+2

@fedeetz: адреса биткойнов содержат контрольную сумму. Вы не можете проверить биткойн-адрес с помощью регулярного выражения, потому что * все * биткойн-адреса имеют эту контрольную сумму. верно, что вы regexp отбрасываете многие адреса, которые явно недействительны ... Но ваше регулярное выражение также примет безумное число недопустимых. Сама цель этой контрольной суммы ** является **, чтобы люди не могли использовать недействительные адреса, d склонны считать, что автор (ы) биткойнов очень умные люди и знали, что они делают. Выполнение «проверки» без проверки контрольной суммы, чья цель является валидацией, не имеет смысла. – TacticalCoder

ответ

10

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

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

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

+4

Мне кажется, что цель регулярного выражения заключается в поиске * потенциальные * адреса биткойнов, не обязательно действительные. – runeks

+1

Модуль Regex был бы хорош для легкого, такого как плагин браузера, или веб-браузера. –

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

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

+4

Спасибо за предоставление хотя бы частично правильного решения, а не скулить о том, что нельзя сделать, как остальное плакаты. – kape123

+2

Поскольку действительный кандидат биткойнов должен иметь длину 26 и 35 символов, интервал должен быть '{25, 34}', из-за '^ [13]' при запуске отбирает символ из счета. См. Спецификации: https://en.bitcoin.it/wiki/Address – mokagio

+0

исключение, что заглавная буква «O», прописная буква «I», строчная буква «l» и номер «0» никогда не используются для предотвращения визуального неоднозначность. – AMB

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

Bitcoin адрес

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

Просьба рассмотреть вопрос о том, как работает это регулярное выражение. – Matt

+0

Матовый, Bitcoin адрес - идентификатор 26-35 буквенно-цифровых символов - начиная с номера 1 или 3 - случайных цифр - верхний регистр - строчные буквы - за исключением, что заглавная буква «О», верхний регистр буква «I», строчная буква «l», а число «0» никогда не используется для предотвращения визуальной двусмысленности. Это единственный правильный ответ. – FranciscoA

+0

Так отредактируйте свой ответ, чтобы включить это! – Matt

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^