我的文本字段中有三个电子邮件ID。这三封电子邮件也存储在名为feedbackEmailsArray
的数组中。这些电子邮件ID也以逗号分隔。
但是如果我不需要电子邮件,那么当我单击Backspace按钮并完全删除电子邮件ID时,我也希望将其从feedbackEmailsArray
中删除。
我该如何实现..?
编辑1 :这就是我删除电子邮件ID的方式:
if let char = string.cString(using: String.Encoding.utf8) {
let isBackSpace = strcmp(char, "\\b")
if (isBackSpace == -92) {
//Backspace was pressed
}
}
最佳答案
试试这个。
首先,您将文本字段中的字符串分成基于','的部分。然后我们清除feedbackEmailsArray
,然后将电子邮件添加回feedbackEmailsArray
validateEmail
将检查当前字符串是否为有效电子邮件,如果有效字符串,则将其添加到数组中。如果要在程序中的任何位置使用validateEmail
,可以将其设置为全局函数或静态函数。
func validateEmail(email:String) -> Bool {
let emailFormat = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
let emailPredicate = NSPredicate(format:"SELF MATCHES %@", emailFormat)
return emailPredicate.evaluate(with: email)
}
var emailIds = yourtextfield.text
var emailIdsArr = emailIds.split(separator: ",")
feedbackEmailsArray.removeAll()
for i in(0..<emailIdsArr.count) where emailIdsArr.indices.contains(i)
{
if validateEmail(email:emailIdsArr[i]) == true
{ feedbackEmailsArray.append(emailIdsArr[i]) }
}
说明:@testname
validateEmail
函数检查您键入的内容是否为有效格式,即“[email protected]”。现在,每次在该电子邮件字段中退格时,emailIds
变量将获得整个字符串(abc @ abc.com,bcd @ bcd.com,asd @ a)。在此字符串中,asd @ a不是有效的电子邮件。现在,emailIDs.split
将根据emailIds
字符上的数字拆分,
变量中的字符串。这些以emailIdsArr
的形式存储在emailIdArr[0],emailIdArr[1],emailIdArr[2]...
中for循环使用emailIdArr.count获取
emailIdArr
中的索引总数。 where emailIdsArr.indices.contains(i)
是检查索引是否有效的简单检查。只是为了使其防撞(由@iOSDev添加到我的答案中)。现在调用了
validateEmail
,并且我们在emailIdsArr[i]
的索引处将其作为字符串提供给参数(例如i = 5然后index = 5,因此validateEmail(email:[email protected])会返回true,因为它采用的是emailId格式)validateEmail
是一个布尔函数,如果字符串采用emailID格式,则返回true;否则返回false。因此,如果
validateEmail
返回true,则该电子邮件将附加到feedbackEmailsArray
。由于我们正在使用append并且可以随时更改emailId的数量,因此每次调用整个函数时,我们都必须清除整个数组,因此
feedbackEmailsArray.removeAll()
放置在for循环的外部和上方。