如何实现一个函数来检查给定的用户名是否是以小写字母(Erlang atom)开头的字母数字?
此功能在JAVASCRIPT中是等效的:
module Main where
import Control.Monad.Trans.Except
import qualified Data.Text as T
type StrError = String
type TxtError = T.Text
funA :: String -> Except StrError String
funA = return
funB :: String -> Except TxtError T.Text
funB = return . T.pack
fun :: String -> IO ()
fun s = case runExcept (funB =<< funA s) of
Left e -> putStrLn $ show e
Right _ -> return ()
main :: IO ()
main = fun "foo"
答案 0 :(得分:3)
所以你需要用户名是非空字符串,其中第一个元素是小写字母,其余的是字母或数字。
让我们从匹配第一个字母开始:
STATIC_ROOT = os.path.join(BASE_DIR, "static")
检查是否是小写字母:
is_valid_username([First | Rest]) ->
并检查其余字符是否为字母数字:
$a =< First andalso First =< $z
最后为空字符串添加一个函数子句:
andalso lists:all(fun is_alphanumeric/1, Rest);
现在我们只需要实现函数is_valid_username("") ->
false.
,它检查单个字符:
is_alphanumeric/1