swift 邮箱、密码、手机号、身份证验证正则

ios-Swift UITextField封装,电话号码,身份证,银行卡号,密码输入框.zip 支持电话号码 身份证 银行卡 密码 四种输入框使用,调用方便,可修改性强 立即下载
/验证邮箱
    class func validateEmail(email: String) -> Bool {
        if email.count == 0 {
            return false
        }
        let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"
        let emailTest:NSPredicate = NSPredicate(format: "SELF MATCHES %@", emailRegex)
        return emailTest.evaluate(with: email)
    }
    
    //验证手机号
    class func isPhoneNumber(phoneNumber:String) -> Bool {
        if phoneNumber.count == 0 {
            return false
        }
        let mobile = "^1([358][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$"
        let regexMobile = NSPredicate(format: "SELF MATCHES %@",mobile)
        if regexMobile.evaluate(with: phoneNumber) == true {
            return true
        }else
        {
            return false
        }
    }
    
    //密码正则  6-8位字母和数字组合
    class func isPasswordRuler(password:String) -> Bool {
        let passwordRule = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,8}$"
        let regexPassword = NSPredicate(format: "SELF MATCHES %@",passwordRule)
        if regexPassword.evaluate(with: password) == true {
            return true
        }else
        {
            return false
        }
    }
    
    //验证身份证号
    class func isTrueIDNumber(text:String) -> Bool{
        var value = text
        value = value.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
        var length : Int = 0
        length = value.count
        if length != 15 && length != 18{
           //不满足15位和18位,即身份证错误
            return false
        }
        // 省份代码
        let areasArray = ["11","12", "13","14", "15","21", "22","23", "31","32", "33","34", "35","36", "37","41", "42","43", "44","45", "46","50", "51","52", "53","54", "61","62", "63","64", "65","71", "81","82", "91"]
        // 检测省份身份行政区代码
        let index = value.index(value.startIndex, offsetBy: 2)
        let valueStart2 = value.substring(to: index)
        //标识省份代码是否正确
        var areaFlag = false
        for areaCode in areasArray {
            if areaCode == valueStart2 {
                areaFlag = true
                break
            }
        }
        if !areaFlag {
           return false
        }
        var regularExpression : NSRegularExpression?
        var numberofMatch : Int?
        var year = 0
        switch length {
            case 15:
                 //获取年份对应的数字
                let valueNSStr = value as NSString
                let yearStr = valueNSStr.substring(with: NSRange.init(location: 6, length: 2)) as NSString
                year = yearStr.integerValue + 1900
                if year % 4 == 0 || (year % 100 == 0 && year % 4 == 0) {
                    //创建正则表达式 NSRegularExpressionCaseInsensitive:不区分字母大小写的模式
                    //测试出生日期的合法性
                    regularExpression = try! NSRegularExpression.init(pattern: "^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$", options: NSRegularExpression.Options.caseInsensitive)
                }else{
                    //测试出生日期的合法性
                    regularExpression = try! NSRegularExpression.init(pattern: "^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$", options: NSRegularExpression.Options.caseInsensitive)
                }
                numberofMatch = regularExpression?.numberOfMatches(in: value, options: NSRegularExpression.MatchingOptions.reportProgress, range: NSRange.init(location: 0, length: value.count))
                if numberofMatch! > 0 {
                    return true
                }else{
                    return false
                }
            case 18:
                let valueNSStr = value as NSString
                let yearStr = valueNSStr.substring(with: NSRange.init(location: 6, length: 4)) as NSString
                year = yearStr.integerValue
                if year % 4 == 0 || (year % 100 == 0 && year % 4 == 0) {
                    //测试出生日期的合法性
                    regularExpression = try! NSRegularExpression.init(pattern: "^((1[1-5])|(2[1-3])|(3[1-7])|(4[1-6])|(5[0-4])|(6[1-5])|71|(8[12])|91)\\d{4}(((19|20)\\d{2}(0[13-9]|1[012])(0[1-9]|[12]\\d|30))|((19|20)\\d{2}(0[13578]|1[02])31)|((19|20)\\d{2}02(0[1-9]|1\\d|2[0-8]))|((19|20)([13579][26]|[2468][048]|0[048])0229))\\d{3}(\\d|X|x)?$", options: NSRegularExpression.Options.caseInsensitive)
                    
                }else{
                    //测试出生日期的合法性
                    regularExpression = try! NSRegularExpression.init(pattern: "^((1[1-5])|(2[1-3])|(3[1-7])|(4[1-6])|(5[0-4])|(6[1-5])|71|(8[12])|91)\\d{4}(((19|20)\\d{2}(0[13-9]|1[012])(0[1-9]|[12]\\d|30))|((19|20)\\d{2}(0[13578]|1[02])31)|((19|20)\\d{2}02(0[1-9]|1\\d|2[0-8]))|((19|20)([13579][26]|[2468][048]|0[048])0229))\\d{3}(\\d|X|x)?$", options: NSRegularExpression.Options.caseInsensitive)
                    
                }
                numberofMatch = regularExpression?.numberOfMatches(in: value, options: NSRegularExpression.MatchingOptions.reportProgress, range: NSRange.init(location: 0, length: value.count))
                
                if numberofMatch! > 0 {
                    let a = getStringByRangeIntValue(Str: valueNSStr, location: 0, length: 1) * 7
                    let b = getStringByRangeIntValue(Str: valueNSStr, location: 10, length: 1) * 7
                    let c = getStringByRangeIntValue(Str: valueNSStr, location: 1, length: 1) * 9
                    let d = getStringByRangeIntValue(Str: valueNSStr, location: 11, length: 1) * 9
                    let e = getStringByRangeIntValue(Str: valueNSStr, location: 2, length: 1) * 10
                    let f = getStringByRangeIntValue(Str: valueNSStr, location: 12, length: 1) * 10
                    let g = getStringByRangeIntValue(Str: valueNSStr, location: 3, length: 1) * 5
                    let h = getStringByRangeIntValue(Str: valueNSStr, location: 13, length: 1) * 5
                    let i = getStringByRangeIntValue(Str: valueNSStr, location: 4, length: 1) * 8
                    let j = getStringByRangeIntValue(Str: valueNSStr, location: 14, length: 1) * 8
                    let k = getStringByRangeIntValue(Str: valueNSStr, location: 5, length: 1) * 4
                    let l = getStringByRangeIntValue(Str: valueNSStr, location: 15, length: 1) * 4
                    let m = getStringByRangeIntValue(Str: valueNSStr, location: 6, length: 1) * 2
                    let n = getStringByRangeIntValue(Str: valueNSStr, location: 16, length: 1) * 2
                    let o = getStringByRangeIntValue(Str: valueNSStr, location: 7, length: 1) * 1
                    let p = getStringByRangeIntValue(Str: valueNSStr, location: 8, length: 1) * 6
                    let q = getStringByRangeIntValue(Str: valueNSStr, location: 9, length: 1) * 3
                    let S = a + b + c + d + e + f + g + h + i + j + k + l + m + n + o + p + q
                    
                    let Y = S % 11
                    
                    var M = "F"
                    
                    let JYM = "10X98765432"
                    
                    M = (JYM as NSString).substring(with: NSRange.init(location: Y, length: 1))
                    
                    let lastStr = valueNSStr.substring(with: NSRange.init(location: 17, length: 1))
                    
                    if lastStr == "x" {
                        if M == "X" {
                            return true
                        }else{
                            return false
                        }
                    }else{
                        if M == lastStr {
                            return true
                        }else{
                            return false
                        }
                    }
                    
                }else{
                    return false
                }
            default:
                return false
          }
    }

 

数据工程师——ETL 文章摘要 ETL(数据抽取、转换、加载)是数据处理的核心流程,负责将分散数据源整合为高质量数据。ETL与ELT的主要区别在于转换步骤顺序,分别适用于不同规模数据场景。数据仓库通过ETL从多个数据源集成数据,支持分析决策。维度建模中的事实表记录业务指标,维度表提供上下文信息。缓慢变化维度(SCD)处理随时间变化的维度数据,常见类型包括直接覆盖型、新增版本型等。数据清洗解决数据缺失、重复、错误等问题,确保数据质量。数据血缘记录数据流转路径,便于问题排查和影响分析。常用ETL工具如Kettle通过转换和作业实现数 阅读详情

相关推荐

QGIS中高效处理CAD数据的两种实用技巧

本文详细解析了在QGIS中高效处理CAD数据的两种核心方法。针对DWG/DXF文件在QGIS中直接打开失败的问题,介绍了使用QGIS内置数据导入管理器进行标准化转换的流程,并重点推荐了功能更强大的Another DXF Importer插件,以更好地保留文字、块属性等复杂信息。文章对比了两种方法的优劣与适用场景,并提供了坐标系设置、中文乱码等常见问题的避坑指南,帮助用户根据数据需求选择最佳导入策略。

weixin_28363123的博客 117

swift5 正则简单使用

/* 判断是否价格 */ let money = "100.98" let parrern = "^\\d+(\\.\\d{0,2})?$" if NSPredicate(format: "SELF MATCHS %@",pattern).evaluate(with:money){ print("是价格") }else{ print("不是价格") } ...

weixin_33721427的博客 503

保姆级教程:用Vue3+Element Plus快速搭建Flowable流程定义管理后台界面

本文提供了一份详细的Vue3+Element Plus教程,指导开发者快速搭建Flowable流程定义管理后台界面。从项目初始化、核心页面设计到响应式数据处理,全面覆盖前端开发关键步骤,帮助提升企业级应用开发效率。

weixin_42662293的博客 480

Swift 使用正则表达式

正则表达式对于字符串的匹配、查找、替换是非常实用的。那在 Swift 中怎么来使用正则表达式了?以及正则表达式初高级使用。

小桥流水哗啦啦,iOS Coder 哒哒哒 4365

一个开源的AI数据分析工具,与数据对话,一键生成SQL、图表、表格、报告和智能商业分析。

Wren AI是一个开源的AI智能代理,让用户能够跟数据对话,实现从文本到SQL的转换,还能生成图表、电子表格、报告以及商业智能分析。它支持多种语言,能深入挖掘数据价值,提供智能数据探索功能,通过语义索引和精心设计的界面,让用户无需写代码即可获取洞察。Wren AI采用独特的架构,包含Wren UI、Wren AI Service和Wren Engine三大核心服务,可部署在本地或云端,助力团队高效、安全地解锁数据潜力。

AI_Charlotte的博客 4495

在 SAP S/4HANA Cloud Public Edition 中掌控 ABAP 生命周期管理:One-Off、Multi-Off 与 Scalable Delivery 的落地方法论

本文系统梳理了SAP S/4HANA Cloud Public Edition中ABAP扩展开发的三种生命周期管理模式:One-Off适用于企业内部扩展,通过Import Collection在三系统间流转;Multi-Off面向少量客户交付,基于gCTS和Git实现不连接系统间的传输;Scalable Delivery则将扩展产品化为add-on,支持规模化分发。文章结合RAP、OData等实际开发场景,对比分析了各模式的特点与适用边界,为国内团队提供了符合Public Cloud要求的开发与交付实践建议

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1495

正则表达式-(常用)

我们常常遇到这种需求:要求用户输入的用户名必须是字母、密码必须是数字、判断用户输入的手机号是否合法等等。这些需求我们就可以使用NSPredicate和正则表达式来配合筛选了。 首先我们来说说正则表达式。正则表达式的语法非常复杂,对于一般的验证条件,我们可以在网上找到现成的表达式,拿来就能用,我展示一些常用的正则出来: 1.验证用户名和密码:("^[a-zA-Z]

bestoneToo的博客 576

基于深度学习的农作物病虫害检测识别系统:YOLOv8 + UI界面 + 数据集

该系统的目标是使用YOLOv8模型自动检测农作物的病虫害,并通过UI界面提供实时反馈。用户可以通过上传图像,系统会输出图像中是否存在病虫害以及具体种类。数据集准备与处理:收集并准备包含农作物病虫害图像的数据集,并进行标注和数据增强。YOLOv8模型训练:使用YOLOv8训练农作物病虫害检测模型。UI界面设计与开发:开发一个用户友好的界面,支持上传图像并展示检测结果。系统测试与优化:评估模型的准确性、实时性,并对系统进行优化。

YOLO 883

iOS 常用验证(手机号、邮箱、密码、身份证号)

手机号码验证 + (BOOL) validateMobile:(NSString *)mobile { /** * 手机号码 * 移动:134/135/136/137/138/139/150/151/152/157/158/159/182/183/184/187/188/147/178 * 联通:130/131/132/155/156/185/186/145/176 * 电信:133/153/180/181/189/177 */ NSSt

u013712343的博客 1755

猫群优化算法(CSO)详解:从生物灵感到智能优化

猫群优化算法(CSO)是一种模拟猫科动物行为的群体智能优化算法。该算法基于猫的两种主要行为模式:搜寻状态(全局探索)和跟踪状态(局部开发)。CSO通过混合率(MR)动态调整两种模式的比例,实现探索与开发的平衡。算法核心包括搜寻模式的变异操作和跟踪模式的速度-位移模型,具有收敛性能好、全局搜索能力强等特点。相比传统优化算法,CSO在高维复杂问题中表现优异,已成功应用于函数优化、图像处理等多个领域。算法性能受混合率、变化域等参数影响,自适应参数策略可进一步提升优化效果。

qq_42212808的博客 618

C#实战大华智能安防系统:从SDK封装到视频流与智能报警的全链路落地

本文将介绍C#集成大华SDK开发安防系统的实战经验,重点解决多路视频预览卡顿和报警延迟问题。文章通过三层架构设计(SDK封装层、业务服务层、应用层)实现解耦,详细分析线程安全封装、高效解码显示和智能事件联动等核心技术。针对16路摄像头同时预览时CPU占用率过高的问题,提出使用子码流拉流与异步解码的优化方案,并总结8个常见开发陷阱的解决方案。文中还提供了大华智能安防系统的完整架构图,展示从设备层到应用层的交互流程,特别强调业务服务层中视频流服务和智能报警服务的核心功能设计。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 431

NSPredicate及正则的一点使用

记录一点正则表达式的使用。 例如:判断字符串首字母是否为字母。 Objective-c代码   NSString *regex = @"[A-Za-z]+";    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];       if ([predicate ev

179

Pre-suite 开发之MFi功能搭建

Pre-suite 固件中只有带无线硬件的Ezairo 7160sl才具备无线通信能力,其无线功能包括标准BLE 5.2 低功耗蓝牙功能以及非标准的低功耗无线音频流功能。Ezairo 7160sl 支持3种低功耗无线音频流协议:来自APPLE的MFi,来自Google的ASHA以及来自onsemi的remote mic。其中MFi音频流走的G.722编码的Mode1,速率为64kbps;而非MFi音频流走的G.722的Mode3,速率为48kbps.

SnowYang2017的博客 1500

swift 邮箱、密码、手机号、身份证验证正则

/验证手机号}else//密码正则 6-8位字母和数字组合![0-9]+?!a−zA−Z}else//验证身份证号if length!= 18{//不满足15位和18位,即身份证错误// 省份代码// 检测省份身份行政区代码//标识省份代码是否正确breakif!areaFlag {case 15://获取年份对应的数字//创建正则表达式 NSRegularExpressionCaseInsensitive:不区分字母大小写的模式//测试出生日期的合法性。

2401_85599558的博客 892

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

正则表达式验证

在iOS开发中,在登录和注册以及个人中心中经常会用到一些格式验证,比如身份证、手机号、密码等等,为了在平时用着方便,我对一些常用的验证进行了封装:

风铃的翼的博客 482

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

iOS正则表达式检验手机号,邮箱等

//正则判断手机号码格式 + (BOOL)validatePhone:(NSString *)phone { /** * 手机号码 * 移动:134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188 * 联通:130,131,132,152,155,156,185

落叶听松的博客 613

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

iOS开发——手机号,密码,邮箱,身份证号,中文判断

目前这些方面的判断主要是用了正则表达式 手机号的判断,目前主要是长度、均是数字,支持的号段由于第三方通讯比如京东通讯,小米通讯等支持的号段挺多, 有171,170,135,147等等,所以号段限制简单即可。 @"^((13[0-9])|(147)|(17[0-9])|(15[^4,\\D])|(18[0,0-9]))\\d{8}$...

weixin_30780221的博客 90

正则表达式

#pragma 正则匹配手机号 + (BOOL)checkTelNumber:(NSString *) telNumber {     NSString *pattern = @"^1+[3578]+\d{9}";     NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pat

st646889325的博客 383

iOS - 正则表达式判断邮箱、身份证..是否正确:

//邮箱 + (BOOL) validateEmail:(NSString *)email {     NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";     NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF

u011269663的专栏 393

iOS正则表达式

最近整理了之前用到的正则表达式,有不足之处还请大家指正哦!! //手机号码验证+ (BOOL) validateMobile:(NSString *)mobile { //手机号以13, 15,18开头,八个 \d 数字字符 NSString *phoneRegex = @"^((13[0-9])|(15[^4,\\D])|(18[0,0-9]))\\d{8}$"; NSPr

圆缘园猿的博客 441

iOS - 正则表达式判断邮箱、身份证..是否正确

转自-http://blog.sina.com.cn/s/blog_6fd90b5b0101gcqd.html //邮箱 + (BOOL) validateEmail:(NSString *)email {     NSString *emailRegex =@"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";

sch1111878的专栏 610

iOS中正则表达式的使用

#pragma正则匹配手机号 //swift //******正则表达式 Regular Expressions*************** let K_PHONE = "1[0-9]{10}" let K_IDCARD = "SELF MATCHES '^(\\d{14}|\\d{17})(\\d|[xX])$'" let K_REGULAR_VERIFI...

weixin_30819163的博客 136

IOS开发之常用的正则表达式

[objc] view plaincopy iOS 中可以通过 NSPredicate 来处理正则表达式。相关资料如下: NSPredicate 苹果官方文档: http://developer.apple.com/documentation/Cocoa/Conceptual/Predicates/predicates.html Pred

CC的专栏 368

一些常用的正则表达式

NSString * regex        = @"(^[A-Za-z0-9]{6,15}$)";  NSPredicate * pred      = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];  BOOL isMatch            = [pred evaluateWithObject:

Kamto_6的专栏 661

常用正则表达式

本文转载至 http://www.android100.org/html/201408/07/51999.html //邮箱 + (BOOL) validateEmail:(NSString *)email {     NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";     NSPre...

weixin_33929309的博客 104
上一篇: 安卓学习资源整理
下一篇: Mac 设置环境变量的位置、查看和添加PATH环境变量
星宇AI成长日记
星宇AI成长日记 优质创作者: 前端开发技术领域 优质创作者: 前端开发技术领域
博客等级 码龄12年 2万+粉丝 370原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星宇AI成长日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值