diff --git a/xfa/fgas/crt/cfgas_formatstring.cpp b/xfa/fgas/crt/cfgas_formatstring.cpp
index 77dfb45..b7a26c5 100644
--- a/xfa/fgas/crt/cfgas_formatstring.cpp
+++ b/xfa/fgas/crt/cfgas_formatstring.cpp
@@ -1441,14 +1441,8 @@
         ccf--;
         break;
       case 'z':
-        if (FXSYS_isDecimalDigit(str[cc])) {
-          wsValue->Insert(0, str[cc]);
-          cc--;
-        }
-        ccf--;
-        break;
       case 'Z':
-        if (str[cc] != ' ') {
+        if (strf[ccf] == 'z' || str[cc] != ' ') {
           if (FXSYS_isDecimalDigit(str[cc])) {
             wsValue->Insert(0, str[cc]);
             cc--;
@@ -1459,20 +1453,8 @@
         ccf--;
         break;
       case 'S':
-        if (str[cc] == '+' || str[cc] == ' ') {
-          cc--;
-        } else {
-          cc -= iMinusLen - 1;
-          if (cc < 0 || wcsncmp(str + cc, wsMinus.c_str(), iMinusLen))
-            return false;
-
-          cc--;
-          bNeg = true;
-        }
-        ccf--;
-        break;
       case 's':
-        if (str[cc] == '+') {
+        if (str[cc] == '+' || (strf[ccf] == 'S' && str[cc] == ' ')) {
           cc--;
         } else {
           cc -= iMinusLen - 1;
@@ -1525,19 +1507,10 @@
         break;
       }
       case 'r':
-        if (ccf - 1 >= 0 && strf[ccf - 1] == 'c') {
-          if (str[cc] == 'R' && cc - 1 >= 0 && str[cc - 1] == 'C') {
-            bNeg = true;
-            cc -= 2;
-          }
-          ccf -= 2;
-        } else {
-          ccf--;
-        }
-        break;
       case 'R':
-        if (ccf - 1 >= 0 && strf[ccf - 1] == 'C') {
-          if (str[cc] == ' ') {
+        if (ccf - 1 >= 0 && ((strf[ccf] == 'R' && strf[ccf - 1] == 'C') ||
+                             (strf[ccf] == 'r' && strf[ccf - 1] == 'c'))) {
+          if (strf[ccf] == 'R' && str[cc] == ' ') {
             cc -= 2;
           } else if (str[cc] == 'R' && cc - 1 >= 0 && str[cc - 1] == 'C') {
             bNeg = true;
@@ -1549,19 +1522,10 @@
         }
         break;
       case 'b':
-        if (ccf - 1 >= 0 && strf[ccf - 1] == 'd') {
-          if (str[cc] == 'B' && cc - 1 >= 0 && str[cc - 1] == 'D') {
-            bNeg = true;
-            cc -= 2;
-          }
-          ccf -= 2;
-        } else {
-          ccf--;
-        }
-        break;
       case 'B':
-        if (ccf - 1 >= 0 && strf[ccf - 1] == 'D') {
-          if (str[cc] == ' ') {
+        if (ccf - 1 >= 0 && ((strf[ccf] == 'B' && strf[ccf - 1] == 'D') ||
+                             (strf[ccf] == 'b' && strf[ccf - 1] == 'd'))) {
+          if (strf[ccf] == 'B' && str[cc] == ' ') {
             cc -= 2;
           } else if (str[cc] == 'B' && cc - 1 >= 0 && str[cc - 1] == 'D') {
             bNeg = true;
@@ -1572,10 +1536,6 @@
           ccf--;
         }
         break;
-      case '.':
-      case 'V':
-      case 'v':
-        return false;
       case '%': {
         CFX_WideString wsSymbol =
             pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Percent);
@@ -1589,6 +1549,9 @@
         bHavePercentSymbol = true;
         break;
       }
+      case '.':
+      case 'V':
+      case 'v':
       case '8':
         return false;
       case ',': {
@@ -1605,16 +1568,8 @@
         break;
       }
       case '(':
-        if (str[cc] == L'(')
-          bNeg = true;
-        else if (str[cc] != L' ')
-          return false;
-
-        cc--;
-        ccf--;
-        break;
       case ')':
-        if (str[cc] == L')')
+        if (str[cc] == strf[ccf])
           bNeg = true;
         else if (str[cc] != L' ')
           return false;
@@ -1665,14 +1620,8 @@
           ccf++;
           break;
         case 'z':
-          if (FXSYS_isDecimalDigit(str[cc])) {
-            *wsValue += str[cc];
-            cc++;
-          }
-          ccf++;
-          break;
         case 'Z':
-          if (str[cc] != ' ') {
+          if (strf[ccf] == 'z' || str[cc] != ' ') {
             if (FXSYS_isDecimalDigit(str[cc])) {
               *wsValue += str[cc];
               cc++;
@@ -1683,20 +1632,8 @@
           ccf++;
           break;
         case 'S':
-          if (str[cc] == '+' || str[cc] == ' ') {
-            cc++;
-          } else {
-            if (cc + iMinusLen > len ||
-                wcsncmp(str + cc, wsMinus.c_str(), iMinusLen)) {
-              return false;
-            }
-            bNeg = true;
-            cc += iMinusLen;
-          }
-          ccf++;
-          break;
         case 's':
-          if (str[cc] == '+') {
+          if (str[cc] == '+' || (strf[ccf] == 'S' && str[cc] == ' ')) {
             cc++;
           } else {
             if (cc + iMinusLen > len ||
@@ -1746,17 +1683,10 @@
           break;
         }
         case 'c':
-          if (ccf + 1 < lenf && strf[ccf + 1] == 'r') {
-            if (str[cc] == 'C' && cc + 1 < len && str[cc + 1] == 'R') {
-              bNeg = true;
-              cc += 2;
-            }
-            ccf += 2;
-          }
-          break;
         case 'C':
-          if (ccf + 1 < lenf && strf[ccf + 1] == 'R') {
-            if (str[cc] == ' ') {
+          if (ccf + 1 < lenf && ((strf[ccf] == 'C' && strf[ccf + 1] == 'R') ||
+                                 (strf[ccf] == 'c' && strf[ccf + 1] == 'r'))) {
+            if (strf[ccf] == 'C' && str[cc] == ' ') {
               cc++;
             } else if (str[cc] == 'C' && cc + 1 < len && str[cc + 1] == 'R') {
               bNeg = true;
@@ -1766,17 +1696,10 @@
           }
           break;
         case 'd':
-          if (ccf + 1 < lenf && strf[ccf + 1] == 'b') {
-            if (str[cc] == 'D' && cc + 1 < len && str[cc + 1] == 'B') {
-              bNeg = true;
-              cc += 2;
-            }
-            ccf += 2;
-          }
-          break;
         case 'D':
-          if (ccf + 1 < lenf && strf[ccf + 1] == 'B') {
-            if (str[cc] == ' ') {
+          if (ccf + 1 < lenf && ((strf[ccf] == 'D' && strf[ccf + 1] == 'B') ||
+                                 (strf[ccf] == 'd' && strf[ccf + 1] == 'b'))) {
+            if (strf[ccf] == 'D' && str[cc] == ' ') {
               cc++;
             } else if (str[cc] == 'D' && cc + 1 < len && str[cc + 1] == 'B') {
               bNeg = true;
@@ -1818,16 +1741,8 @@
           break;
         }
         case '(':
-          if (str[cc] == L'(')
-            bNeg = true;
-          else if (str[cc] != L' ')
-            return false;
-
-          cc++;
-          ccf++;
-          break;
         case ')':
-          if (str[cc] == L')')
+          if (str[cc] == strf[ccf])
             bNeg = true;
           else if (str[cc] != L' ')
             return false;
