At a certain point you just want pattern matching.
-
-
Save swannodette/2594296 to your computer and use it in GitHub Desktop.
Beautiful Validation... Why have I never thought of this before?!
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(defn validates-credentials [username password] | |
(let [uc (count username) | |
pc (count password)] | |
(match [username uc password pc] | |
[(:or nil "") _ _ _] {:error "No username given" :field "name"} | |
[_ _ (:or nil "") _] {:error "No password given" :field "pass"} | |
[_ (_ :guard #(< % 3)) _ _] {:error "Username less than 3 characters" :field "pass"} | |
[_ _ _ (_ :guard #(< % 4))] {:error "Password less than 4 characters" :field "pass"} | |
[#"^([a-z0-9-_]+)$" _ _ _] {:error "Username contains invalid characters" :field "name"} | |
:else true))) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var user = { | |
validateCredentials: function (username, password) { | |
return ( | |
(!(username += '') || username === '') ? { error: "No Username Given.", field: 'name' } | |
: (!(username += '') || password === '') ? { error: "No Password Given.", field: 'pass' } | |
: (username.length < 3) ? { error: "Username is less than 3 Characters.", field: 'name' } | |
: (password.length < 4) ? { error: "Password is less than 4 Characters.", field: 'pass' } | |
: (!/^([a-z0-9-_]+)$/i.test(username)) ? { error: "Username contains invalid characters.", field: 'name' } | |
: false | |
); | |
} | |
}; | |
var results = user.validateCredentials('Nijikokun','somepassword'); | |
console.log(results); |
Don't disagree. But for simple cases like this pattern matching is fine. For something more sophisticated ... yes, you need something more sophisticated :)
this is pretty gouda :3
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Sure, but now you have error handling outside of the match statement, and you've added an if statement, etc. Validation is tricky. Pattern matching doesn't make it any less so.