繁体   English   中英

如何在Haskell中检查字符串的每个字符

[英]How to check for each char of a string in Haskell

我有一个用于检查用户名是否有效的函数的功课。 允许的字符为下划线,字母和数字。 我不允许使用索引(!!)和长度

到目前为止,我的代码:

isValid' :: Char -> Bool
isValid' x
     | x == '_'    = True
     | x `elem` ['0'..'9'] = True
     | x `elem` ['a'..'z'] = True
     | x `elem` ['A'..'Z'] = True
     | otherwise           = False

isValidUsername :: [Char] -> Bool
isValidUsername x
     | map isValid' x = True
     | otherwise     = False

我想在我放入isValidUsername的字符串的所有字符上运行isValid函数。 例如:

isValidUsername "MyUsername_123"应该返回True

isValidUsername "not@v@lidusern@me* *2"应该返回False

我只是想不出如何遍历字符串的所有字符。

好吧,如果您希望所有元素都满足isValid'函数,则可以使用all :: (a -> Bool) -> [a] -> Bool函数,因此可以将函数重写为:

isValidUsername :: [Char] -> Bool
isValidUsername x = all isValid' x

甚至更短:

isValidUsername :: [Char] -> Bool
isValidUsername = all isValid'

请注意,这里的意思是空字符串 ""也是有效的用户名,因为对于空字符串,所有字符(没有字符)都在字母数字范围内。

好的,我知道了:

isValidUsername :: [Char] -> Bool
isValidUsername x
     | False `elem` (map isValid x) = False
     | otherwise                    = True

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM