我实际上是oCaml的新手并且正在努力学习。 我的一个职能面临着一个大问题。 它位于一个简单的函数(下面)里面,我想通过检查它是否有'@'然后是''来检查电子邮件地址的有效性。和每个之前和之后的文本。 (我不想使用正则表达式,如果您只知道如何使用正则表达式,我真的很抱歉,但我不会考虑正则表达式的答案^^')。
以下是代码,提前谢谢:
let checkMail mail =
if String.contains mail '@' = false
then false
else
let tmp = String.sub mail (String.index mail '@') ((string_length mail) - (String.index mail '@')) in;;
if tmp.length < mail.length && String.contains tmp '.' = true
then
let last = String.sub tmp (String.index tmp '.') ((string_length tmp.length - 1) - (String.index tmp '.')) in;;
if last.length < tmp.length && last.length > 1
then true
else false
else false
;;
此外,我在ocaml提示符中收到此错误:File "yolo.ml", line 8, characters 105-107:
Error: Syntax error
这对应于第二个if调用,当我试图通过最后调用String.index来找到正确的子字符串大小时。它出现在'@'
。
如果您有任何想法,请随意分享:)!
答案 0 :(得分:1)
我看到的第一个问题是这一行:
let tmp = String.sub mail (String.index mail '@')
((string_length mail) - (String.index mail '@')) in;;
;;
是你输入的顶级信号(OCaml REPL),它应该评估你到目前为止输入的内容。在此代码中,由于尚未输入完整表达式,因此会导致语法错误。
恕我直言,将;;
视为只在与顶层交谈时输入的内容真的很有帮助。它不是OCaml语言本身的一部分(尽管我总是看到相反的谣言)。
答案 1 :(得分:1)
let checkMail mail =
if String.contains mail '@' = false
then false
else
let tmp = String.sub mail (String.index mail '@') ((String.length mail) - (String.index mail '@')) in
if String.length tmp < String.length mail && String.contains tmp '.' = true
then
let last = String.sub tmp (String.index tmp '.') ((String.length tmp - 1) - (String.index tmp '.')) in
if String.length last < String.length tmp && String.length last > 1
then true
else false
else false;;
值得注意的是: