一种输入框内容的校验方法、装置、存储介质及终端与流程

文档序号:16734875发布日期:2019-01-28 12:33阅读:163来源:国知局
一种输入框内容的校验方法、装置、存储介质及终端与流程

本发明涉及校验领域,特别是涉及一种输入框内容的校验方法、装置、存储介质及终端。



背景技术:

随着移动互联网的快速发展,移动端日渐成为人机交互的主要平台,在业务交互时,往往会遇到需要限制文本输入的需求,比如只能输入数字、不能输入空格、小数点后最多两位的价格输入等等,此时需要设置校验方法对输入框的内容进行校验。

在现有技术中,常常将内容校验算法添加在输入框控件的代理方法中,在当前页面中存在多个输入框的情况下,通过上述方法会在当前类中编写大量校验代码,造成校验逻辑复杂,不利于扩展,且在维护时需要理清所有逻辑关系,既增加维护成本,又易出现较高的错误率。



技术实现要素:

本发明提供一种输入框内容的校验方法、装置、存储介质及终端,用以解决现有技术将内容校验算法添加在输入框控件的代理方法中,多个输入框存在的情况下,校验逻辑复杂,不利于扩展和维护的问题。

为解决上述技术问题,一方面,本发明提供一种输入框内容的校验方法,包括:接收预设输入框内的输入内容;在后台策略池中,调用所述预设输入框对应的具体策略类,校验所述输入内容。

进一步,所述接收预设输入框内的输入内容之前,还包括:创建包含校验接口方法的输入策略类;创建实现所述校验接口方法的所述具体策略类,并将所述具体策略类保存至所述后台策略池中;创建所述预设输入框,其中,所述预设输入框为封装类的实例对象;将所述预设输入框和所述具体策略类进行封装。

进一步,所述调用所述预设输入框对应的具体策略类,校验所述输入内容,包括:根据所述具体策略类实现所述校验接口方法;通过所述校验接口方法校验所述输入内容。

进一步,所述校验所述输入内容之后,还包括:输出校验所述输入内容的校验结果。

另一方面,本发明还提供一种输入框内容的校验装置,包括:接收模块,用于接收预设输入框内的输入内容;校验模块,用于在后台策略池中,调用所述预设输入框对应的具体策略类,校验所述输入内容。

进一步,还包括:第一建立模块,用于创建包含校验接口方法的输入策略类;第二建立模块,用于创建实现所述校验接口方法的所述具体策略类,并将所述具体策略类保存至所述后台策略池中;输入框建立模块,用于创建所述预设输入框,其中,所述预设输入框为封装类的实例对象;封装模块,用于将所述预设输入框和所述具体策略类进行封装。

进一步,所述校验模块,具体用于:根据所述具体策略类实现所述校验接口方法;通过所述校验接口方法校验所述输入内容。

进一步,还包括:输出模块,用于输出校验所述输入内容的校验结果。

另一方面,本发明还提供一种存储介质,存储有计算机程序,其特征在于,计算机程序被处理器执行时实现上述的输入框内容的校验方法的步骤。

另一方面,本发明还提供一种终端,至少包括存储器、处理器,存储器上存储有计算机程序,处理器在执行存储器上的计算机程序时实现上述的输入框内容的校验方法的步骤。

本发明在接收到在当前页面的预设输入框内的输入内容后,只需要在后台的策略池中调用该预设输入框对应的具体策略类,即可根据该具体策略类实现的具体方法,对输入内容进行校验,使当前页面中的输入框和后台保存的校验方法分离,每个输入框只需要调用其对应的具体策略类即可,使校验逻辑简单,易于扩展和维护,解决了在多个输入框存在的情况下,校验逻辑复杂,不利于扩展和维护的问题。

附图说明

图1是本发明第一实施例中输入框内容的校验方法的流程图;

图2是本发明第二实施例中输入框内容的校验方法的流程图;

图3是本发明第三实施例中输入框内容的校验方法的流程图;

图4是本发明第四实施例中输入框内容的校验装置的结构示意图;

图5是本发明第五实施例中输入框内容的校验装置的结构示意图;

图6是本发明第六实施例中输入框内容的校验装置的结构示意图。

具体实施方式

为了解决现有技术将内容校验算法添加在输入框控件的代理方法中,多个输入框存在的情况下,校验逻辑复杂,不利于扩展和维护的问题,本发明提供了一种输入框内容的校验方法、装置、存储介质及终端,以下结合附图以及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不限定本发明。

本发明的第一实施例提供了一种输入框内容的校验方法,其流程图如图1所示,主要包括步骤s101和s102:

s101,接收预设输入框内的输入内容。

s102,在后台策略池中,调用预设输入框对应的具体策略类concretestrategy,校验输入内容。

用户在使用如手机、平板电脑等终端时,为了进行信息交互,需要在对应页面的输入框中输入各种信息,以完成信息交互。为了提升待交互信息的准确性、可读性或统一性,输入框中输入的信息内容通常需要经过内容校验,在符合其对应的校验规则时,输入框中输入的信息内容通过校验,才可以进行下一步地信息交互或显示,如用户在输入年龄时,只能输入正整数;在输入邮箱信息时,不能输入某些特定的字符等等。若在同一个页面中存在多个输入框需要用户填写,则对应的校验逻辑全部集中在输入框控件的代理方法中,使校验逻辑复杂,不利于后期维护和扩展。

为了解决上述问题,本实施例首先获取当前页面中预设输入框中待校验的输入内容,随后通过调用在后台策略池中的该预设输入框对应的具体策略类concretestrategy,进行输入内容的校验。具体地,预设输入框中的输入内容,可以为用户手动在预设输入框中输入的内容,也可以为其他程序或算法执行完毕后生成的内容输入至预设输入框中。具体策略类是策略模式下,包含有具体算法或行为的角色,在实现时通过抽象策略角色提供的接口算法,实现具体策略类中的算法,在本实施例中,具体策略类中包含校验输入框内容的校验算法,并根据校验内容的不同,校验算法的内容不同,此时,可对应设置具体策略类的名称如数字输入校验类numberinputstrategy或字母输入校验类letterinputstrategy等。后台策略池,实际上是独立于预设输入框所在的当前页面的其他页面或位置,具体策略类保存于后台策略池中,并不直接编写在预设输入框所在的页面内,在调用时直接调用策略池中与输入框对应的具体策略类即可,同时也方便新增具体策略类,防止出现由于输入框过多在当前页面编写过多的校验算法,不利于后期维护的问题。

由于对于一个输入框来说,在后台策略池中有且只有一个具体策略类与其对应,用于实现对输入框中输入的具体内容的校验。例如,若有一输入框a,其对应输入的内容为当前用户的手机号码,并限制其只能输入11位的数字,此时,具体策略类concretestrategy可以具体的设置为数字输入校验类numberinputstrategy,对输入框中输入的内容进行位数和字符类型的校验。用户在输入框a中输入一串字符后,接收用户输入的字符串,并通过numberinputstrategy校验该字符串是否为11位的数字。

若当前页面中存在多个输入框,则用户在一个输入框内输入完毕后,都会由该输入框对应的具体策略类来具体进行该输入框输入内容的校验,多个输入框之间的校验不会互相影响,降低了校验逻辑的复杂度,并且在后期维护时,可根据出现问题的输入框快速找到对应的具体策略类进行修改会调整,并且在新添加输入框时,只需要创建与其对应的具体策略类即可。

本实施例在接收到在当前页面的预设输入框内的输入内容后,只需要调用后台策略池中该预设输入框对应的具体策略类,即可根据该具体策略类实现的具体方法,对输入内容进行校验,使当前页面的输入框和后台策略池中的校验方法分离,每个输入框只需要调用其对应的具体策略类即可,使校验逻辑简单,易于扩展和维护,解决了在多个输入框存在的情况下,校验逻辑复杂,不利于扩展和维护的问题。

本发明的第二实施例提供了一种输入框内容的校验方法,其流程图如图2所示,主要包括步骤s201至s207:

s201,创建包含校验接口方法inputtextfield()的输入策略类inputstrategy。

在进行输入框输入内容的校验之前,首先要构建一种可根据输入框不同进行具体策略类自由切换的策略模式,首先需要创建一个对外提供接口校验方法的输入策略类inputstrategy,作为策略模式的抽象策略角色,在inputstrategy中添加对外的校验接口方法inputtextfield(),该方法提供了具体策略类所实现必要的方法和属性,也是策略模式对外的接口。

s202,创建实现inputtextfield()的concretestrategy类,并将concretestrategy类保存至后台策略池中。

具体策略类concretestrategy是策略模式中具体进行校验的类,并实现校验接口方法inputtextfield(),其主要作用为实现内容校验的算法,并且在调用时,根据输入框对应的具体策略类具体的校验算法,使对外的校验接口方法执行不同的校验逻辑,达到对该输入框内容进行校验的目的,concretestrategy类创建后保存至后台策略池中,与预设输入框所在的页面互相独立,通过策略模式的校验接口方法与预设输入框所在的页面进行通信。

应当了解的是,具体策略类concretestrategy可以同时具有多个,即对应多个输入框,并且可根据其具体校验的内容,将其分别命名,如校验字母输入是否合法的letterinputstrategy,校验数字输入是否合法的numberinputstrategy类等,上述两种具体策略类均实现了inputtextfield(),在调用letterinputstrategy类时,inputtextfield()执行校验字母输入是否合法的逻辑,在调用numberinputstrategy时,inputtextfield()执行校验数字输入是否合法的逻辑。

s203,创建预设输入框。

s204,将预设输入框和concretestrategy类进行封装。

预设输入框实际上是封装类customtextfield的实例对象,且每个输入框对应一个customtextfield类下的实例对象。根据每个输入框得设置目的,将该输入框与实现其校验方法的具体策略类进行统一封装,实际上即是将二者进行关联的过程,封装后输入框或其他程序均无法获取到concretestrategy内的校验逻辑,只能通过对外的校验接口方法实现concretestrategy内的校验逻辑,以完成输入内容的校验。

在进行扩展时,所添加的新的输入框对应的具体策略类concretestrategy只需要实现校验接口方法inputtextfield(),并进行封装,即可在新添加的输入框中具有输入内容时,使用新添加的具体策略类concretestrategy对其进行校验。

s205,接收预设输入框内的输入内容。

s206,根据concretestrategy类实现inputtextfield()。

s207,通过inputtextfield()校验输入内容。

获取预设输入框中待校验的输入内容后,根据该输入框对应的具体策略类concretestrategy实现对外的校验接口方法inputtextfield(),然后通过inputtextfield()校验输入框中的输入内容,上述过程实际上是由inputtextfield()执行concretestrategy的内部校验逻辑,以实现输入框对应的校验方法,完成输入内容的校验。

本实施例在接收到当前页面中预设输入框内的输入内容后,只需要调用后台策略池中该预设输入框对应的具体策略类,即可根据该具体策略类的具体校验算法,实现对外的校验接口方法,进行输入框内容的校验,使输入框和校验方法分离,每个输入框只需要调用其对应的具体策略类即可,使校验逻辑简单,易于扩展和维护,解决了在多个输入框存在的情况下,校验逻辑复杂,不利于扩展和维护的问题。

本发明的第三实施例提供了一种输入框内容的校验方法,其流程图如图3所示,主要包括步骤s301至s303:

s301,接收预设输入框内的输入内容。

s302,在后台策略池中,调用预设输入框对应的具体策略类concretestrategy,校验输入内容。

本实施例首先获取预设输入框中待校验的输入内容,随后通过调用该预设输入框对应的具体策略类concretestrategy,进行输入内容的校验。具体地,预设输入框中的输入内容,可以为用户手动在预设输入框中输入的内容,也可以为其他程序或算法执行完毕后生成的内容输入至预设输入框中。

由于对于一个输入框来说,在后台策略池中有且只有一个具体策略类与其对应,用于实现对输入框中输入的具体内容的校验。例如,若有一输入框a,其对应输入的内容为当前用户的手机号码,并限制其只能输入11位的数字,此时,具体策略类concretestrategy可以具体的设置为数字输入校验类numberinputstrategy,对输入框中输入的内容进行位数和字符类型的校验。用户在输入框a中输入一串字符后,接收用户输入的字符串,并通过numberinputstrategy校验该字符串是否为11位的数字。

若当前页面中存在多个输入框,则用户在一个输入框内输入完毕后,都会由该输入框对应的具体策略类来具体进行该输入框输入内容的校验,多个输入框之间的校验不会互相影响,降低了校验逻辑的复杂度,并且在后期维护时,可根据出现问题的输入框快速找到对应的具体策略类进行修改会调整,并且在新添加输入框时,只需要创建与其对应的具体策略类即可。

s303,输出校验输入内容的校验结果。

具体策略类concretestrategy校验完毕后,输出校验该输入框中输入内容的校验结果,该校验结果可供用户对自身输入的内容或其他程序执行后输出至输入框内的内容的正确定进行判断,其显示方式可以为弹窗显示,或通过设置输入框的底色来表示不同的校验结果,如底色为绿色,则证明校验通过,若为红色,则证明校验未通过,需要用户进行修改。

本实施例在接收到当前页面中预设输入框内的输入内容后,只需要调用后台策略池中该预设输入框对应的具体策略类,即可根据该具体策略类实现的具体方法,对输入内容进行校验,并输出校验结果,使输入框和校验方法分离,每个输入框只需要调用其对应的具体策略类即可,使校验逻辑简单,易于扩展和维护,方便查看校验结果,解决了在多个输入框存在的情况下,校验逻辑复杂,不利于扩展和维护的问题。

本发明的第四实施例提供了一种输入框内容的校验装置,主要安装于计算机、手机等终端,其结构示意图如图4所示,主要包括:接收模块10,用于接收预设输入框内的输入内容;校验模块20,与接收模块10耦合,用于在后台策略池中,调用预设输入框对应的具体策略类concretestrategy,校验输入内容。

用户在使用如手机、平板电脑等终端时,为了进行信息交互,需要在对应页面的输入框中输入各种信息,以完成信息交互。为了提升待交互信息的准确性、可读性或统一性,输入框中输入的信息内容通常需要经过内容校验,在符合其对应的校验规则时,输入框中输入的信息内容通过校验,才可以进行下一步地信息交互或显示,如用户在输入年龄时,只能输入正整数;在输入邮箱信息时,不能输入某些特定的字符等等。若在同一个页面中存在多个输入框需要用户填写,则对应的校验逻辑全部集中在输入框控件的代理方法中,使校验逻辑复杂,不利于后期维护和扩展。

为了解决上述问题,本实施例首先通过接收模块10获取当前页面中预设输入框中待校验的输入内容,随后通过校验模块20调用在后台策略池中的该预设输入框对应的具体策略类concretestrategy,进行输入内容的校验。具体地,预设输入框中的输入内容,可以为用户手动在预设输入框中输入的内容,也可以为其他程序或算法执行完毕后生成的内容输入至预设输入框中。后台策略池,实际上是独立于预设输入框所在的当前页面的其他页面或位置,具体策略类保存于后台策略池中,并不直接编写在预设输入框所在的页面内,在调用时直接调用策略池中与输入框对应的具体策略类即可,同时也方便新增具体策略类,防止出现由于输入框过多在当前页面编写过多的校验算法,不利于后期维护的问题。

由于对于一个输入框来说,在后台策略池中有且只有一个具体策略类与其对应,用于实现对输入框中输入的具体内容的校验。例如,若有一输入框a,其对应输入的内容为当前用户的手机号码,并限制其只能输入11位的数字,此时,具体策略类concretestrategy可以具体的设置为数字输入校验类numberinputstrategy,对输入框中输入的内容进行位数和字符类型的校验。用户在输入框a中输入一串字符后,接收用户输入的字符串,并通过numberinputstrategy校验该字符串是否为11位的数字。

若当前页面中存在多个输入框,则用户在一个输入框内输入完毕后,都会由该输入框对应的具体策略类来具体进行该输入框输入内容的校验,多个输入框之间的校验不会互相影响,降低了校验逻辑的复杂度,并且在后期维护时,可根据出现问题的输入框快速找到对应的具体策略类进行修改会调整,并且在新添加输入框时,只需要创建与其对应的具体策略类即可。

本实施例在接收到在当前页面的预设输入框内的输入内容后,只需要调用后台策略池中该预设输入框对应的具体策略类,即可根据该具体策略类实现的具体方法,对输入内容进行校验,使当前页面的输入框和后台策略池中校验方法分离,每个输入框只需要调用其对应的具体策略类即可,使校验逻辑简单,易于扩展和维护,解决了在多个输入框存在的情况下,校验逻辑复杂,不利于扩展和维护的问题。

本发明的第五实施例提供了一种输入框内容的校验装置,主要安装于计算机、手机等终端,其结构示意图如图5所示,主要包括:第一建立模块30,用于创建包含校验接口方法inputtextfield()的输入策略类inputstrategy;第二建立模块40,与第一建立模块30耦合,用于创建实现inputtextfield()的concretestrategy类,并将concretestrategy类保存至后台策略池中;输入框建立模块50,与第二建立模块40耦合,用于创建预设输入框,其中,预设输入框为封装类customtextfield的实例对象;封装模块60,与输入框建立模块50和第二建立模块40耦合耦合,用于将预设输入框和concretestrategy类进行封装;接收模块10,与封装模块60耦合,用于接收预设输入框内的输入内容;校验模块20,与接收模块10耦合,用于根据concretestrategy类实现inputtextfield(),通过inputtextfield()校验输入内容。

在进行输入框输入内容的校验之前,首先要构建一种可根据输入框不同进行具体策略类自由切换的策略模式,首先通过第一建立模块30创建一个对外提供接口校验方法的输入策略类inputstrategy,作为策略模式的抽象策略角色,在inputstrategy中添加对外的校验接口方法inputtextfield(),该方法提供了具体策略类所实现必要的方法和属性,也是策略模式对外的接口。

第二建立模块40创建的具体策略类concretestrategy是策略模式中具体进行校验的类,并实现校验接口方法inputtextfield(),其主要作用为实现内容校验的算法,并且在调用时,根据输入框对应的具体策略类具体的校验算法,使对外的校验接口方法执行不同的校验逻辑,达到对该输入框内容进行校验的目的,concretestrategy类创建后保存至后台策略池中,与预设输入框所在的页面互相独立,通过策略模式的校验接口方法与预设输入框所在的页面进行通信。

应当了解的是,具体策略类concretestrategy可以同时具有多个,即对应多个输入框,并且可根据其具体校验的内容,将其分别命名,如校验字母输入是否合法的letterinputstrategy,校验数字输入是否合法的numberinputstrategy类等,上述两种具体策略类均实现了inputtextfield(),在调用letterinputstrategy类时,inputtextfield()执行校验字母输入是否合法的逻辑,在调用numberinputstrategy时,inputtextfield()执行校验数字输入是否合法的逻辑。

输入框建立模块50创建的预设输入框实际上是封装类customtextfield的实例对象,且每个输入框对应一个customtextfield类下的实例对象。随后由封装模块60根据每个输入框得设置目的,将该输入框与实现其校验方法的具体策略类进行统一封装,实际上即是将二者进行关联,封装后输入框或其他程序均无法获取到concretestrategy内的校验逻辑,只能通过对外的校验接口方法实现concretestrategy内的校验逻辑,以完成输入内容的校验。

在进行扩展时,通过第二建立模块40和输入框建立模块50分别创建新的concretestrategy和输入框,所添加的新的输入框对应的具体策略类concretestrategy只需要实现校验接口方法inputtextfield(),并通过封装模块60进行封装,即可在新添加的输入框中具有输入内容时,使用新添加的具体策略类concretestrategy对其进行校验。

接收模块10获取预设输入框中待校验的输入内容后,校验模块20根据该输入框对应的具体策略类concretestrategy实现对外的校验接口方法inputtextfield(),然后通过inputtextfield()校验输入框中的输入内容,上述过程实际上是由inputtextfield()执行concretestrategy的内部校验逻辑,以实现输入框对应的校验方法,完成输入内容的校验。

本实施例在接收到当前页面中预设输入框内的输入内容后,只需要调用后台策略池中该预设输入框对应的具体策略类,即可根据该具体策略类的具体校验算法,实现对外的校验接口方法,进行输入框内容的校验,使输入框和校验方法分离,每个输入框只需要调用其对应的具体策略类即可,使校验逻辑简单,易于扩展和维护,解决了在多个输入框存在的情况下,校验逻辑复杂,不利于扩展和维护的问题。

本发明的第六实施例提供了一种输入框内容的校验装置,主要安装于计算机、手机等终端,其结构示意图如图6所示,主要包括:接收模块10,用于接收预设输入框内的输入内容;校验模块20,与接收模块10耦合,用于在后台策略池中调用预设输入框对应的具体策略类concretestrategy,校验输入内容;输出模块70,与校验模块20耦合,用于输出校验输入内容的校验结果。

本实施例首先通过接收模块10获取预设输入框中待校验的输入内容,随后通过校验模块20调用该预设输入框对应的具体策略类concretestrategy,进行输入内容的校验。具体地,预设输入框中的输入内容,可以为用户手动在预设输入框中输入的内容,也可以为其他程序或算法执行完毕后生成的内容输入至预设输入框中。

由于对于一个输入框来说,在后台策略池中有且只有一个具体策略类与其对应,用于实现对输入框中输入的具体内容的校验。若当前页面中存在多个输入框,则用户在一个输入框内输入完毕后,会由该输入框对应的具体策略类来具体进行该输入框输入内容的校验,多个输入框之间的校验不会互相影响,降低了校验逻辑的复杂度,并且在后期维护时,可根据出现问题的输入框快速找到对应的具体策略类进行修改会调整,并且在新添加输入框时,只需要创建与其对应的具体策略类即可。

校验模块20校验完毕后,由输出模块70输出校验该输入框中输入内容的校验结果,该校验结果可供用户对自身输入的内容或其他程序执行后输出至输入框内的内容的正确定进行判断,其显示方式可以为弹窗显示,或通过设置输入框的底色来表示不同的校验结果,如底色为绿色,则证明校验通过,若为红色,则证明校验未通过,需要用户进行修改。

本实施例在接收到当前页面中预设输入框内的输入内容后,只需要调用后台策略池中该预设输入框对应的具体策略类,即可根据该具体策略类实现的具体方法,对输入内容进行校验,并输出校验结果,使输入框和校验方法分离,每个输入框只需要调用其对应的具体策略类即可,使校验逻辑简单,易于扩展和维护,方便查看校验结果,解决了在多个输入框存在的情况下,校验逻辑复杂,不利于扩展和维护的问题。

本发明第七实施例提供了一种存储介质,存储有计算机程序,计算机程序被处理器执行时实现如下步骤s11和s12:

s11,接收预设输入框内的输入内容;

s12,在后台策略池中,调用预设输入框对应的具体策略类concretestrategy,校验输入内容。

在本实施例中,存储介质可以安装在手机或计算机等终端中。由于在第一实施例中已经对输入框内容的校验方法的具体步骤进行了详细说明,因此,在本实施例中不再赘述。

可选地,在本实施例中,上述存储介质可以包括但不限于:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。可选地,在本实施例中,处理器根据存储介质中已存储的程序代码执行上述实施例记载的方法步骤。可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。

本发明的第八实施例提供了一种终端,至少包括存储器、处理器,存储器上存储有计算机程序,处理器在执行存储器上的计算机程序时实现如下步骤s21和s22:

s21,接收预设输入框内的输入内容;

s22,在后台策略池中,调用预设输入框对应的具体策略类concretestrategy,校验输入内容。

在本实施例中,终端可以为手机或计算机等终端。由于在第一实施例中已经对输入框内容的校验方法的具体步骤进行了详细说明,因此,在本实施例中不再赘述。

尽管为示例目的,已经公开了本发明的优选实施例,本领域的技术人员将意识到各种改进、增加和取代也是可能的,因此,本发明的范围应当不限于上述实施例。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1