Filter out whitespace and zero-width non-breaking spaces in validator
- Fixes issues with copy/pasting from web or html emails (#1325)
This commit is contained in:
parent
46784d0826
commit
25047eb3e9
1 changed files with 18 additions and 2 deletions
|
@ -21,9 +21,12 @@ BitcoinAddressValidator::BitcoinAddressValidator(QObject *parent) :
|
||||||
QValidator::State BitcoinAddressValidator::validate(QString &input, int &pos) const
|
QValidator::State BitcoinAddressValidator::validate(QString &input, int &pos) const
|
||||||
{
|
{
|
||||||
// Correction
|
// Correction
|
||||||
for(int idx=0; idx<input.size(); ++idx)
|
for(int idx=0; idx<input.size();)
|
||||||
{
|
{
|
||||||
switch(input.at(idx).unicode())
|
bool removeChar = false;
|
||||||
|
QChar ch = input.at(idx);
|
||||||
|
// Transform characters that are visually close
|
||||||
|
switch(ch.unicode())
|
||||||
{
|
{
|
||||||
case 'l':
|
case 'l':
|
||||||
case 'I':
|
case 'I':
|
||||||
|
@ -33,9 +36,22 @@ QValidator::State BitcoinAddressValidator::validate(QString &input, int &pos) co
|
||||||
case 'O':
|
case 'O':
|
||||||
input[idx] = QChar('o');
|
input[idx] = QChar('o');
|
||||||
break;
|
break;
|
||||||
|
// Qt categorizes these as "Other_Format" not "Separator_Space"
|
||||||
|
case 0x200B: // ZERO WIDTH SPACE
|
||||||
|
case 0xFEFF: // ZERO WIDTH NO-BREAK SPACE
|
||||||
|
removeChar = true;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
// Remove whitespace
|
||||||
|
if(ch.isSpace())
|
||||||
|
removeChar = true;
|
||||||
|
// To next character
|
||||||
|
if(removeChar)
|
||||||
|
input.remove(idx, 1);
|
||||||
|
else
|
||||||
|
++idx;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validation
|
// Validation
|
||||||
|
|
Loading…
Reference in a new issue