- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章IOS实现邮箱模糊匹配的功能由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
先来看看要实现的效果图 。
一.介绍一下功能 。
当输入一个邮箱的数字,会默认在后面匹配出来@qq.com,当然这个默认@qq.com可以换成其他的如@163.com等等。这里默认是@qq.com,因为我们的产品汪做过统计大多数用户还是用的qq邮箱,所以默认是@qq.com.
当输入@符号还是不会有所变化,但是如果在@之后再输入字符,会将这个字符和你想要提示的邮箱后缀做匹配,我这里是需要匹配@qq.com,@163.com,@126.com,@yahoo.com,@139.com,@henu.com类型。例如:在@之后你输入了1,这个时候会在@1之后匹配出来63.com。接着,当你在@1之后又输入了2,会在@12后面匹配出来6.com。这些匹配的优先级是根据你给的需要匹配邮箱类型的顺序来的,并且这些想要匹配的邮箱类型也是完全可配的,可根据产品的需求作自己的定制.
二.说一下用法 。
1.先说一下如果你是在xib中想实现这个功能,首先要拖拽一个textfield,设置好约束,然后让这个textfield的类关联到xltextfield,当前前提你要下载并导入了xltextfield.h和xltextfield.m,切记不要忘了将textfield.delegate设置给viewcontroller,textfield样式可在xib自行设置,匹配的邮箱区域颜色可自行设置,然后在代码中只需要调api 。
1
2
3
4
5
6
|
/**
*
*1.通过xib创建只需要赋值此参数即可
*@param mailtypearray邮箱匹配类型
*
*/
@property(nonatomic,strong)nsmutablearray*mailtypearray;
|
示例代码
1
|
self.textfield.mailtypearray= [nsmutablearrayarraywithobjects:@
"@qq.com"
,@
"@163.com"
,@
"@126.com"
,@
"@yahoo.com"
,@
"@139.com"
,@
"@henu.com"
,nil];
|
xltextfield.h还提供了一个可选的mailmatchcolor属性这个属性是uicolor类型的,是匹配邮箱类型的颜色,可根据需求自行设置.
1
2
3
|
/**
*optional匹配的邮箱类型后缀默认是rgb为170 170 170的颜色,可自行设置
*/
@property(nonatomic,strong)uicolor* mailmatchcolor;
|
2.通过手动frame创建两个基本参数设置大小和字号,其他设置可额外自行设置,调用api 。
1
2
3
4
5
6
7
8
|
/**
*2.通过手写创建textfield时候调用
*
*@param frameframe大小
*@param fontsize textfield大小
*
*@return self
*/
- (instancetype)initwithframe:(cgrect)frame fontsize:(cgfloat)fontsize;
|
示例代码:
1
2
3
4
5
|
xltextfield * field = [[xltextfield alloc] initwithframe:cgrectmake(100, 200, 200, 30) fontsize:12];
field.placeholder = @
"输入邮箱地址"
;
field.mailtypearray = [nsmutablearray arraywithobjects:@
"@qq.com"
,@
"@163.com"
,@
"@126.com"
,@
"@yahoo.com"
,@
"@139.com"
,@
"@henu.com"
, nil];
field.mailmatchcolor = [uicolor redcolor]; 可选属性
[self.view addsubview:field];
|
我在示例程序中只针对xib的textfield写了手势关闭,结束textfield的输入操作,手洞创建textfield没有写结束第一响应者的操作。如果你在实际使用中,可以根据你的需求例如点击键盘的完成按钮,或者触摸屏幕的view等场景下结束textfield的键盘第一响应者,从而取textfield的text进行额外的需求操作.
可根据自己需求定制自己的frame,font大小。不过不支持init和new初始化方法,即使用了也没关系,会有一个温馨的报错提示 。
1
|
- (instancetype)init__attribute__((unavailable(
"init方法不可用,请用initwithname:fontszie:"
)));+ (instancetype)new__attribute__((unavailable(
"init方法不可用,请用initwithname:fontszie:"
)));
|
三.介绍一下实现原理 。
1.可能你不看源码,就认为是一个textfield实现了全部功能,其实no.我这里是配合了一个label,在xib实现时利用aulayout手动添加label。textfield只是用来让用户输入,label用来存储匹配之后的邮箱(邮箱号码+邮箱类型),并且展示。你看到的其实是label的text内容。当最后结束编辑的时候,label会将内容复制给textfield的text,然后清空label。label只是在这里提一下实现方式,真正使用的值还是通过textfield.text拿到的值。在这里你可能会吐槽,为什么不用一个textfield呢,多简单省事。但是事实是我尝试过一个textfield,中间遇到了一个坑,好像是textfield一个bug,暂且这样说 因为当时确实是很奇葩的问题,具体是那么也忘记了,这里也不展开说了,有兴趣你可以用一个textfield来尝试一下哈.
2.textfield的代理方法全部封装在textfield.m内部,在内部已经处理了这些代理,更加方便他人调用,不用再花很多心思在调试textfield的代理方法上。不论是用xib还是用手动代码创建,都不需要设置textfield.delegate给控制器.
3.在textfield的shouldchangecharactersinrange代理方法中针对你输入的每一个字符进行邮箱的匹配,下面会有这一块的完整代码。在textfielddidendediting代理方法中将label的值赋值给textfield.text,然后将label.text清空,直接取textfield.text作为我们最终的结果.
下面贴上匹配邮箱过程的关键代码,并且每行都有注释.
1
2
3
4
5
6
7
8
9
10
11
12
|
/**
*匹配邮箱过程
*
*@param rangerange
*@param string用户输入string
*/
- (
void
)configmailmatchingrange:(nsrange)range replacementstring:(nsstring*)string
{
//获取完整的输入文本nsstring*completestr = [self.textstringbyreplacingcharactersinrange:rangewithstring:string];//以@符号分割文本nsarray*temailarray = [completestrcomponentsseparatedbystring:@"@"];//获取邮箱前缀nsstring*emailstring = [temailarrayfirstobject];//邮箱匹配没有输入@符号时用@匹配nsstring*matchstring =@"@";if(temailarray.count>1){//如果已经输入@符号截取@符号以后的字符串作为匹配字符串matchstring = [completestrsubstringfromindex:emailstring.length];
}
//匹配邮箱得到所有跟当前输入匹配的邮箱后缀nsmutablearray*suffixarray = [selfcheckemailstr:matchstring];//边界控制如果没有跟当前输入匹配的后缀置为@""nsstring*fixstr = suffixarray.count>0? [suffixarrayfirstobject] :@"";//将lblemail部分字段隐藏nsintegercutlenth = suffixarray.count>0? completestr.length: emailstring.length;//最终的邮箱地址self.email= fixstr.length>0? [nsstringstringwithformat:@"%@%@",emailstring,fixstr] : completestr;//设置lblemail的attributensmutableattributedstring*attributestring = [[nsmutableattributedstringalloc]initwithstring:[nsstringstringwithformat:@"%@%@",emailstring,fixstr]];
[attributestringaddattribute:nsforegroundcolorattributenamevalue:[uicolorclearcolor]range:nsmakerange(0,cutlenth)];self.maillabel.attributedtext= attributestring;
//清空文本框内容时隐藏lblemailif(completestr.length==0){self.maillabel.text=@"";self.email=@"";
}
}
|
4、总结 。
以上就是ios实现邮箱模糊匹配功能的全部功能,实现后是不是很好用呢?感兴趣的快快动手实践起来,希望对大家的学习或者工作能有所帮助.
最后此篇关于IOS实现邮箱模糊匹配的功能的文章就讲到这里了,如果你想了解更多关于IOS实现邮箱模糊匹配的功能的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
使用sed和/或awk,仅在行包含字符串“ foo”并且行之前和之后的行分别包含字符串“ bar”和“ baz”时,我才希望删除行。 因此,对于此输入: blah blah foo blah bar
例如: S1: "some filename contains few words.txt" S2:“一些文件名包含几个单词 - draft.txt” S3:“一些文件名包含几个单词 - 另一个 dr
我正在尝试处理一些非常困惑的数据。我需要通过样本 ID 合并两个包含不同类型数据的大数据框。问题是一张表的样本 ID 有许多不同的格式,但大多数都包含用于匹配其 ID 中某处所需的 ID 字符串,例如
我想在匹配特定屏幕尺寸时显示特定图像。在这种情况下,对于 Bootstrap ,我使用 col-xx-## 作为我的选择。但似乎它并没有真正按照我认为应该的方式工作。 基本思路,我想显示一种全屏图像,
出于某种原因,这条规则 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*
我想做类似的东西(Nemerle 语法) def something = match(STT) | 1 with st= "Summ" | 2 with st= "AVG" =>
假设这是我的代码 var str="abc=1234587;abc=19855284;abc=1234587;abc=19855284;abc=1234587;abc=19855284;abc=123
我怎样才能得到这个字符串的数字:'(31.5393701, -82.46235569999999)' 我已经在尝试了,但这离解决方案还很远:) text.match(/\((\d+),(\d+)\)/
如何去除输出中的逗号 (,)?有没有更好的方法从字符串或句子中搜索 url。 alert(" http://www.cnn.com df".match(/https?:\/\/([-\w\.]+
a = ('one', 'two') b = ('ten', 'ten') z = [('four', 'five', 'six'), ('one', 'two', 'twenty')] 我正在尝试
我已经编写了以下代码,我希望用它来查找从第 21 列到另一张表中最后一行的值,并根据这张表中 A 列和另一张表中 B 列中的值将它们返回到这张表床单。 当我使用下面的代码时,我得到一个工作表错误。你能
我在以下结构中有两列 A B 1 49 4922039670 我已经能够评估 =LEN(A1)如2 , =LEFT(B1,2)如49 , 和 =LEFT(B1,LEN(A1)
我有一个文件,其中一行可以以 + 开头, -或 * .在其中一些行之间可以有以字母或数字(一般文本)开头的行(也包含这些字符,但不在第 1 列中!)。 知道这一点,设置匹配和突出显示机制的最简单方法是
我有一个数据字段文件,其中可能包含注释,如下所示: id, data, data, data 101 a, b, c 102 d, e, f 103 g, h, i // has to do with
我有以下模式:/^\/(?P.+)$/匹配:/url . 我的问题是它也匹配 /url/page ,如何忽略/在这个正则表达式中? 该模式应该: 模式匹配:/url 模式不匹配:/url/page 提
我有一个非常庞大且复杂的数据集,其中包含许多对公司的观察。公司的一些观察是多余的,我需要制作一个键来将多余的观察映射到一个单独的观察。然而,判断他们是否真的代表同一家公司的唯一方法是通过各种变量的相似
我有以下 XML A B C 我想查找 if not(exists(//Record/subRecord
我制作了一个正则表达式来验证潜在的比特币地址,现在当我单击报价按钮时,我希望根据正则表达式检查表单中输入的值,但它不起作用。 https://jsfiddle.net/arkqdc8a/5/ var
我有一些 MS Word 文档,我已将其全部内容转移到 SQL 表中。 内容包含多个方括号和大括号,例如 [{a} as at [b],] {c,} {d,} etc 我需要进行检查以确保括号平衡/匹
我正在使用 Node.js 从 XML 文件读取数据。但是当我尝试将文件中的数据与文字进行比较时,它不匹配,即使它看起来相同: const parser: xml2js.Parser = new
我是一名优秀的程序员,十分优秀!