|
|
@ -25,17 +25,11 @@ QValidator::State BitcoinAddressValidator::validate(QString &input, int &pos) co |
|
|
|
{ |
|
|
|
{ |
|
|
|
bool removeChar = false; |
|
|
|
bool removeChar = false; |
|
|
|
QChar ch = input.at(idx); |
|
|
|
QChar ch = input.at(idx); |
|
|
|
// Transform characters that are visually close
|
|
|
|
// Corrections made are very conservative on purpose, to avoid
|
|
|
|
|
|
|
|
// users unexpectedly getting away with typos that would normally
|
|
|
|
|
|
|
|
// be detected, and thus sending to the wrong address.
|
|
|
|
switch(ch.unicode()) |
|
|
|
switch(ch.unicode()) |
|
|
|
{ |
|
|
|
{ |
|
|
|
case 'l': |
|
|
|
|
|
|
|
case 'I': |
|
|
|
|
|
|
|
input[idx] = QChar('1'); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case '0': |
|
|
|
|
|
|
|
case 'O': |
|
|
|
|
|
|
|
input[idx] = QChar('o'); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
// Qt categorizes these as "Other_Format" not "Separator_Space"
|
|
|
|
// Qt categorizes these as "Other_Format" not "Separator_Space"
|
|
|
|
case 0x200B: // ZERO WIDTH SPACE
|
|
|
|
case 0x200B: // ZERO WIDTH SPACE
|
|
|
|
case 0xFEFF: // ZERO WIDTH NO-BREAK SPACE
|
|
|
|
case 0xFEFF: // ZERO WIDTH NO-BREAK SPACE
|
|
|
|