github.com/qiniu/x@v1.11.9/ctype/ctype.go (about) 1 package ctype 2 3 const ( 4 UPPER = 0x01 /* upper case letter[A-Z] */ 5 LOWER = 0x02 /* lower case letter[a-z] */ 6 DIGIT = 0x04 /* digit[0-9] */ 7 UNDERLINE = 0x08 /* underline[_] */ 8 XDIGIT = 0x10 /* xdigit[0-9a-fA-F] */ 9 EOL = 0x20 /* [\r\n] */ 10 ADD = 0x40 /* [+] */ 11 SUB = 0x80 /* [-] */ 12 MUL = 0x100 /* [*] */ 13 DIV = 0x200 /* [/] */ 14 LT = 0x400 /* [<] */ 15 GT = 0x800 /* [>] */ 16 EQ = 0x1000 /* [=] */ 17 RDIV = 0x2000 /* [\\], right-division, anti-slash */ 18 DOT = 0x4000 /* [.] */ 19 COLON = 0x8000 /* [:], colon */ 20 PERCENT = 0x10000 /* [%] */ 21 AND = 0x20000 /* [&] */ 22 OR = 0x40000 /* [|] */ 23 SPACE_BAR = 0x80000 /* [ ] */ 24 LCAP_R = 0x100000 /* [r] */ 25 LCAP_T = 0x200000 /* [t] */ 26 LCAP_N = 0x400000 /* [n] */ 27 LCAP_W = 0x800000 /* [w] */ 28 COMMA = 0x1000000 /* [,] */ 29 SEMICOLON = 0x2000000 /* [;] */ 30 TAB = 0x4000000 /* [\t] */ 31 QUOT = 0x8000000 /* ["] */ 32 BACKTICK = 0x10000000 /* [`] */ 33 ) 34 35 const ( 36 BLANK = SPACE_BAR 37 TSPACE = TAB | EOL 38 SPACE = SPACE_BAR | TSPACE 39 PATH_SEP = DIV | RDIV 40 ALPHA = UPPER | LOWER 41 SYMBOL_FIRST_CHAR = ALPHA 42 SYMBOL_NEXT_CHAR = SYMBOL_FIRST_CHAR | DIGIT 43 CSYMBOL_FIRST_CHAR = ALPHA | UNDERLINE 44 CSYMBOL_NEXT_CHAR = CSYMBOL_FIRST_CHAR | DIGIT 45 XMLSYMBOL_FIRST_CHAR = CSYMBOL_FIRST_CHAR 46 XMLSYMBOL_NEXT_CHAR = CSYMBOL_NEXT_CHAR | SUB 47 DOMAIN_CHAR = ALPHA | DIGIT | SUB | ADD | DOT 48 BASE64 = ALPHA | DIGIT | ADD | DIV // [a-zA-Z0-9+/] 49 URLSAFE_BASE64 = ALPHA | DIGIT | SUB | UNDERLINE // [a-zA-Z0-9\-_] 50 ) 51 52 // ----------------------------------------------------------- 53 54 var table = []uint32{ 55 0, // [0] 56 0, // [1] 57 0, // [2] 58 0, // [3] 59 0, // [4] 60 0, // [5] 61 0, // [6] 62 0, // [7] 63 0, // [8] 64 TAB, // [9] 65 EOL, // [10] 66 0, // [11] 67 0, // [12] 68 EOL, // [13] 69 0, // [14] 70 0, // [15] 71 0, // [16] 72 0, // [17] 73 0, // [18] 74 0, // [19] 75 0, // [20] 76 0, // [21] 77 0, // [22] 78 0, // [23] 79 0, // [24] 80 0, // [25] 81 0, // [26] 82 0, // [27] 83 0, // [28] 84 0, // [29] 85 0, // [30] 86 0, // [31] 87 SPACE_BAR, // [32] 88 0, // ! [33] 89 QUOT, // " [34] 90 0, // # [35] 91 0, // $ [36] 92 PERCENT, // % [37] 93 AND, // & [38] 94 0, // ' [39] 95 0, // ( [40] 96 0, // ) [41] 97 MUL, // * [42] 98 ADD, // + [43] 99 COMMA, // , [44] 100 SUB, // - [45] 101 DOT, // . [46] 102 DIV, // / [47] 103 DIGIT | XDIGIT, // 0 [48] 104 DIGIT | XDIGIT, // 1 [49] 105 DIGIT | XDIGIT, // 2 [50] 106 DIGIT | XDIGIT, // 3 [51] 107 DIGIT | XDIGIT, // 4 [52] 108 DIGIT | XDIGIT, // 5 [53] 109 DIGIT | XDIGIT, // 6 [54] 110 DIGIT | XDIGIT, // 7 [55] 111 DIGIT | XDIGIT, // 8 [56] 112 DIGIT | XDIGIT, // 9 [57] 113 COLON, // : [58] 114 SEMICOLON, // ; [59] 115 LT, // < [60] 116 EQ, // = [61] 117 GT, // > [62] 118 0, // ? [63] 119 0, // @ [64] 120 UPPER | XDIGIT, // A [65] 121 UPPER | XDIGIT, // B [66] 122 UPPER | XDIGIT, // C [67] 123 UPPER | XDIGIT, // D [68] 124 UPPER | XDIGIT, // E [69] 125 UPPER | XDIGIT, // F [70] 126 UPPER, // G [71] 127 UPPER, // H [72] 128 UPPER, // I [73] 129 UPPER, // J [74] 130 UPPER, // K [75] 131 UPPER, // L [76] 132 UPPER, // M [77] 133 UPPER, // N [78] 134 UPPER, // O [79] 135 UPPER, // P [80] 136 UPPER, // Q [81] 137 UPPER, // R [82] 138 UPPER, // S [83] 139 UPPER, // T [84] 140 UPPER, // U [85] 141 UPPER, // V [86] 142 UPPER, // W [87] 143 UPPER, // X [88] 144 UPPER, // Y [89] 145 UPPER, // Z [90] 146 0, // [ [91] 147 RDIV, // \ [92] 148 0, // ] [93] 149 0, // ^ [94] 150 UNDERLINE, // _ [95] 151 BACKTICK, // ` [96] 152 LOWER | XDIGIT, // a [97] 153 LOWER | XDIGIT, // b [98] 154 LOWER | XDIGIT, // c [99] 155 LOWER | XDIGIT, // d [100] 156 LOWER | XDIGIT, // e [101] 157 LOWER | XDIGIT, // f [102] 158 LOWER, // g [103] 159 LOWER, // h [104] 160 LOWER, // i [105] 161 LOWER, // j [106] 162 LOWER, // k [107] 163 LOWER, // l [108] 164 LOWER, // m [109] 165 LCAP_N | LOWER, // n [110] 166 LOWER, // o [111] 167 LOWER, // p [112] 168 LOWER, // q [113] 169 LCAP_R | LOWER, // r [114] 170 LOWER, // s [115] 171 LCAP_T | LOWER, // t [116] 172 LOWER, // u [117] 173 LOWER, // v [118] 174 LCAP_W | LOWER, // w [119] 175 LOWER, // x [120] 176 LOWER, // y [121] 177 LOWER, // z [122] 178 0, // { [123] 179 OR, // | [124] 180 0, // } [125] 181 0, // ~ [126] 182 0, // del [127] 183 } 184 185 // ----------------------------------------------------------- 186 187 func Is(typeMask uint32, c rune) bool { 188 189 if uint(c) < uint(len(table)) { 190 return (typeMask & table[c]) != 0 191 } 192 return false 193 } 194 195 func IsType(typeMask uint32, str string) bool { 196 197 if str == "" { 198 return false 199 } 200 for _, c := range str { 201 if !Is(typeMask, c) { 202 return false 203 } 204 } 205 return true 206 } 207 208 func IsTypeEx(typeFirst, typeNext uint32, str string) bool { 209 210 if str == "" { 211 return false 212 } 213 for i, c := range str { 214 if i > 0 { 215 if !Is(typeNext, c) { 216 return false 217 } 218 } else { 219 if !Is(typeFirst, c) { 220 return false 221 } 222 } 223 } 224 return true 225 } 226 227 func IsCSymbol(str string) bool { 228 229 return IsTypeEx(CSYMBOL_FIRST_CHAR, CSYMBOL_NEXT_CHAR, str) 230 } 231 232 func IsXmlSymbol(str string) bool { 233 234 return IsTypeEx(XMLSYMBOL_FIRST_CHAR, XMLSYMBOL_NEXT_CHAR, str) 235 } 236 237 // -----------------------------------------------------------