ios - 电子邮件验证 / SwiftUi
问题描述
我创建了一个登录页面,但无法验证它。你能创建吗?我不希望他们未经验证就登录。我想要电子邮件验证和至少 8 个字符的密码。我正在学习新的swiftui。不幸的是,我没有信息可以做到这一点。
@State private var username = ""
@State private var password = ""
var body: some View {
NavigationView{
VStack{//1-1//---
TextField("username", text: $username)
.frame(width: 300, height:50 , alignment: .center)
.padding(5)
.font(Font.system(size: 15, weight: .medium, design: .serif))
.overlay(RoundedRectangle(cornerRadius: 30).stroke(Color.init( red: 45/255, green: 0/255, blue: 112/255), lineWidth: 1))
TextField("password", text: $password).frame(width: 300, height:50 ,alignment: .center)
.padding(5)
.font(Font.system(size: 15, weight: .medium, design: .serif))
.overlay(RoundedRectangle(cornerRadius: 30).stroke(Color.init( red: 45/255, green: 0/255, blue: 112/255), lineWidth: 1))
Button(action: {
let url = "https:-----------------------"
let params: [String: String] = ["email": username, "password": password]
AF.request(url, method: .post, parameters: params).responseJSON {response in
switch response.result {
case .success : print(response.result)
case .failure(let error) : print("error\(error)")
}
}
}, label: {
Text("Sign Up")
.padding(10)
.font(Font.system(size: 30, weight: .medium, design: .serif))
.foregroundColor(.white)
.background(RoundedRectangle(cornerRadius: 30))
.foregroundColor(.init(red: 45/255, green: 0/255, blue: 112/255))
})
解决方案
这是如何添加验证的演示。
import Combine
import SwiftUI
struct LoginViewV: View {
@State private var email = ""
@State private var password = ""
var body: some View {
VStack {
TextField("Email", text: $email)
TextField("Password", text: $password)
.onReceive(Just(password), perform: { _ in
// This is for max char. If you want to set limit for character, set here
if password.count >= 12 {
password = String(password.prefix(12))
}
})
Button(action: {
// Show error message here
if let errorMessage = self.validView() {
print(errorMessage)
return
}
// Call login API here
/**
login API
*/
}, label: {
Text("Login")
})
Spacer()
}
}
private func validView() -> String? {
if email.isEmpty {
return "Email is empty"
}
if !self.isValidEmail(email) {
return "Email is invalid"
}
if password.isEmpty {
return "Password is empty"
}
if self.password.count < 8 {
return "Password should be 8 character long"
}
// Do same like other validation as per needed
return nil
}
private func isValidEmail(_ email: String) -> Bool {
let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
let emailPred = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
return emailPred.evaluate(with: email)
}
}
推荐阅读
- javascript - refreshtoken 比 accesstoken 有什么好处?
- django - 如何在 django 的不同 div 布局中使用一个 for 循环?
- html - 有没有办法通过在数据包中读取视频来播放视频?
- proguard - 使用 proguard 混淆后没有“springfox.documentation.schema.property.ModelPropertiesProvider”类型的合格 bean
- amazon-web-services - AmazonS3Exception:您提供的 XML 格式不正确
- android - 需要在没有登录 Back4app Android 的情况下更新用户对象数据
- java - Maven Sonatype Release 不起作用:JAR 将为空 - 没有内容被标记为包含
- spring - 调用具有计算值的资源的表示是 RESTFul 吗(面向 UI,特定于客户端)
- c++ - JPEG解码中的霍夫曼:什么是符号、代码和长度
- python - 为什么要向 conda 环境添加通道?