ios - SwiftUI 电子邮件验证
问题描述
如何使用 swiftUI 完成电子邮件验证?
TextField("Please enter your e-mail", text: self.$email)
.modifier(ClearButton(text: $email))
.font(.headline)
.padding(10)
.foregroundColor(.black)
.background(Color.white)
.frame(width: 300, height: 40, alignment: .center)
.cornerRadius(20)
解决方案
验证可以简单地使用onEditingChanged
any来完成TextField
。
下面的代码用于电子邮件验证,但它可以用于任何其他验证。
当用户完成并存在文本字段时,我验证文本,如果未验证,我删除文本,并在其下方显示错误。
import SwiftUI
struct ContentView: View {
@State private var emailString : String = ""
@State private var textEmail : String = ""
@State private var isEmailValid : Bool = true
var body: some View {
VStack {
TextField("email...", text: $textEmail, onEditingChanged: { (isChanged) in
if !isChanged {
if self.textFieldValidatorEmail(self.textEmail) {
self.isEmailValid = true
} else {
self.isEmailValid = false
self.textEmail = ""
}
}
})
//.modifier(ClearButton(text: $email))
.font(.headline)
.padding(10)
.foregroundColor(.black)
.background(Color.white)
.frame(width: 300, height: 40, alignment: .center)
.cornerRadius(20)
.autocapitalization(.none)
if !self.isEmailValid {
Text("Email is Not Valid")
.font(.callout)
.foregroundColor(Color.red)
}
}
}
func textFieldValidatorEmail(_ string: String) -> Bool {
if string.count > 100 {
return false
}
let emailFormat = "(?:[\\p{L}0-9!#$%\\&'*+/=?\\^_`{|}~-]+(?:\\.[\\p{L}0-9!#$%\\&'*+/=?\\^_`{|}" + "~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\" + "x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[\\p{L}0-9](?:[a-" + "z0-9-]*[\\p{L}0-9])?\\.)+[\\p{L}0-9](?:[\\p{L}0-9-]*[\\p{L}0-9])?|\\[(?:(?:25[0-5" + "]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-" + "9][0-9]?|[\\p{L}0-9-]*[\\p{L}0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21" + "-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])"
//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: string)
}}
onEditingChanged
:当用户点击此,isChanged = true
,当用户退出并去其他地方时,isChange = false
。
推荐阅读
- ios - SpriteKit 和 SwiftUI 动画(内存泄漏 - NSXPCConnection?)
- ios - Swift - 将视频转换为数据,String 使用 UTF8 编码返回 nil - 通过 HTTP POST 将视频发送到 AWS S3 存储桶
- python - 试图在 Pygame 简单的 2D 平台游戏中使屏幕中心成为玩家
- azure-devops - ADO 计划预览显示了太多不再需要的过去冲刺
- kubernetes - 如何编辑 GKE 自动扩缩器设置?
- python - Python 错误消息:TypeError:只能将列表(而不是“str”)连接到列表
- python - 将 unique_id 索引稀疏特征的数据帧拆分为百分比测试/训练
- android - Google TalkBack 服务如何在按钮/文本/图像/等上绘制矩形?
- ios - SwiftUI ScrollView 动画滚动有时很慢
- testing - 请求正文的 json 中的 SoapUi 属性扩展不起作用