如何检查字符串是否只包含F#中的字母

时间:2014-08-05 19:21:56

标签: f#

我有一个只应包含字母的字符串。检查我是否已编写以下代码

let isCorrectString(str:string) = 
 let isInRange x = (x > 64 && x < 91 ) || (x > 96 && x < 123) || x = 32
 not (str.Any(fun ch -> not (isInRange (ch :?> int)) ))

我显然正在使用LINQ的“任何&#39;扩展方法在这里。有没有更好的方法来编写上面的代码?

1 个答案:

答案 0 :(得分:5)

如果你想验证它是否正确,你可以这样做:

let isCorrectString(str:string) = 
    let isInRange x = (x > 64 && x < 91 ) || (x > 96 && x < 123) || x = 32
    let bad = 
        str
        |> Seq.map (fun c -> isInRange(int c))
        |> Seq.exists (fun b -> b = false)
    not bad

请注意,这可能是一个更简单的选择:

let isCorrectString(str:string) = 
    str
    |> Seq.forall (fun c -> System.Char.IsLetter(c) || c = ' ')

或者,如果您愿意:

let isCorrectString(str:string) = 
    str
    |> Seq.tryFind (fun c -> not(System.Char.IsLetter(c) || c = ' '))
    |> Option.isNone