Fixed and improved String::IsNumber

Former-commit-id: 5b3dbfb349b64d227670cb891e2c7ef43606a56a
This commit is contained in:
Lynix 2013-03-21 17:32:13 +01:00
parent 5ac36d99ef
commit a65a6f14b5
1 changed files with 10 additions and 4 deletions

View File

@ -2633,7 +2633,7 @@ bool NzString::IsNumber(nzUInt8 base, nzUInt32 flags) const
return false; return false;
NzString check = Simplified(); NzString check = Simplified();
if (check.m_sharedString->size) if (check.m_sharedString->size == 0)
return false; return false;
char* ptr = (check.m_sharedString->string[0] == '-') ? &check.m_sharedString->string[1] : check.m_sharedString->string; char* ptr = (check.m_sharedString->string[0] == '-') ? &check.m_sharedString->string[1] : check.m_sharedString->string;
@ -2642,20 +2642,24 @@ bool NzString::IsNumber(nzUInt8 base, nzUInt32 flags) const
{ {
if (flags & CaseInsensitive) if (flags & CaseInsensitive)
{ {
char limitLower = 'a'+base-1;
char limitUpper = 'A'+base-1;
do do
{ {
char c = *ptr; char c = *ptr;
if (c != ' ' && (c < '0' || (c > '9' && c < 'A') || (c > 'A'+base-1 && c < 'a') || c > 'a'+base-1)) if (c != ' ' && (c < '0' || (c > '9' && c < 'A') || (c > limitUpper && c < 'a') || c > limitLower))
return false; return false;
} }
while (*++ptr); while (*++ptr);
} }
else else
{ {
char limit = 'a'+base-1;
do do
{ {
char c = *ptr; char c = *ptr;
if (c != ' ' && (c < '0' || (c > '9' && c < 'a') || c > 'a'+base-1)) if (c != ' ' && (c < '0' || (c > '9' && c < 'a') || c > limit))
return false; return false;
} }
while (*++ptr); while (*++ptr);
@ -2663,10 +2667,12 @@ bool NzString::IsNumber(nzUInt8 base, nzUInt32 flags) const
} }
else else
{ {
char limit = '0'+base-1;
do do
{ {
char c = *ptr; char c = *ptr;
if (c != ' ' && (c < '0' || c > '0'+base-1)) if (c != ' ' && (c < '0' || c > limit))
return false; return false;
} }
while (*++ptr); while (*++ptr);