nil
Registered Member
Would a regular expression really be better? I feel like it would be an unrecognizable mess that would even more unmantiable than this code here. I was thinking something like an array or map/dictionary that would be matched against the test string would be better, but then again I feel that might be completely optimal.The C++ library that I created at work needs to validate US state abbreviations (US and DC are also accepted). A sane person would do this with a very long regular expression. I am not a sane person.
In my defense, I was really bored that day.C++:bool utils::validate_state_abbrev(const std::string_view str) noexcept{ if(str.length() != 2) //check for correct string length first return false; switch(str[0]){ case 'A': case 'a': switch(str[1]){ case 'K': case 'k': case 'L': case 'l': case 'R': case 'r': case 'Z': case 'z': return true; } break; case 'C': case 'c': switch(str[1]){ case 'A': case 'a': case 'O': case 'o': case 'T': case 't': return true; } break; case 'D': case 'd': switch(str[1]){ case 'C': case 'c': case 'E': case 'e': return true; } break; case 'F': case 'f': switch(str[1]){ case 'L': case 'l': return true; } break; case 'G': case 'g': switch(str[1]){ case 'A': case 'a': return true; } break; case 'H': case 'h': case 'R': case 'r': switch(str[1]){ case 'I': case 'i': return true; } break; case 'I': case 'i': switch(str[1]){ case 'A': case 'a': case 'D': case 'd': case 'L': case 'l': case 'N': case 'n': return true; } break; case 'K': case 'k': switch(str[1]){ case 'S': case 's': case 'Y': case 'y': return true; } break; case 'L': case 'l': case 'P': case 'p': switch(str[1]){ case 'A': case 'a': return true; } break; case 'M': case 'm': switch(str[1]){ case 'A': case 'a': case 'D': case 'd': case 'E': case 'e': case 'I': case 'i': case 'N': case 'n': case 'O': case 'o': case 'S': case 's': case 'T': case 't': return true; } break; case 'N': case 'n': switch(str[1]){ case 'C': case 'c': case 'D': case 'd': case 'E': case 'e': case 'H': case 'h': case 'J': case 'j': case 'M': case 'm': case 'V': case 'v': case 'Y': case 'y': return true; } break; case 'O': case 'o': switch(str[1]){ case 'H': case 'h': case 'K': case 'k': case 'R': case 'r': return true; } break; case 'S': case 's': switch(str[1]){ case 'C': case 'c': case 'D': case 'd': return true; } break; case 'T': case 't': switch(str[1]){ case 'N': case 'n': case 'X': case 'x': return true; } break; case 'U': case 'u': switch(str[1]){ case 'S': case 's': case 'T': case 't': return true; } break; case 'V': case 'v': switch(str[1]){ case 'A': case 'a': case 'T': case 't': return true; } break; case 'W': case 'w': switch(str[1]){ case 'A': case 'a': case 'I': case 'i': case 'V': case 'v': case 'Y': case 'y': return true; } break; } return false; }
I am not really much of programmer.