如何实现一个函数来检查给定的用户名是否是以erlang中的小写字母开头的字母数字?

时间:2016-04-17 15:49:33

标签: erlang

如何实现一个函数来检查给定的用户名是否是以小写字母(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"

1 个答案:

答案 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