Validation Grails验证电子邮件重新输入
我有一个用于用户注册的域类。在注册过程中,用户需要输入两次电子邮件,并且这两次需要匹配。我不想存储重新输入的电子邮件,只想使用它进行验证。有什么建议吗Validation Grails验证电子邮件重新输入,validation,grails,gsp,Validation,Grails,Gsp,我有一个用于用户注册的域类。在注册过程中,用户需要输入两次电子邮件,并且这两次需要匹配。我不想存储重新输入的电子邮件,只想使用它进行验证。有什么建议吗 <label for="reEmail" id="reEmail"> <g:message code="myUser.reEnter.label" default="Re-enter Email:" id="reEnter"/></label> <g:textField name="reEmail"/&g
<label for="reEmail" id="reEmail">
<g:message code="myUser.reEnter.label" default="Re-enter Email:" id="reEnter"/></label>
<g:textField name="reEmail"/>
我的域类看起来像:
class MyUser{
String name
String email
Integer telephone
}
<label for="reEmail" id="reEmail">
<g:message code="myUser.reEnter.label" default="Re-enter Email:" id="reEnter"/></label>
<g:textField name="reEmail"/>
我的观点是:
<label for="reEmail" id="reEmail">
<g:message code="myUser.reEnter.label" default="Re-enter Email:" id="reEnter"/></label>
<g:textField name="reEmail"/>
提前感谢处理此问题的一个好方法是在类中使用字段
<label for="reEmail" id="reEmail">
<g:message code="myUser.reEnter.label" default="Re-enter Email:" id="reEnter"/></label>
<g:textField name="reEmail"/>
像这样
<label for="reEmail" id="reEmail">
<g:message code="myUser.reEnter.label" default="Re-enter Email:" id="reEnter"/></label>
<g:textField name="reEmail"/>
class MyUser{
static constraints = {
email (email: true, blank: false) //<-- just a good idea ;)
}
String name
String email
Integer telephone
String emailAgain
static transients = ['emailAgain'] //<-- won't be stored in the database
}
类MyUser{
静态约束={
电子邮件(email:true,blank:false)//我已经做过几次了。第一次是在控制器中进行验证,但我将其清理干净,最后在客户端的jquery中进行了电子邮件验证
<label for="reEmail" id="reEmail">
<g:message code="myUser.reEnter.label" default="Re-enter Email:" id="reEnter"/></label>
<g:textField name="reEmail"/>
这样你就不必为了一封不匹配的邮件来回奔波了
<label for="reEmail" id="reEmail">
<g:message code="myUser.reEnter.label" default="Re-enter Email:" id="reEnter"/></label>
<g:textField name="reEmail"/>
下面是一个javascript函数示例,用于检查电子邮件是否有效。现在,您所要做的就是再次验证输入的第一封电子邮件
<label for="reEmail" id="reEmail">
<g:message code="myUser.reEnter.label" default="Re-enter Email:" id="reEnter"/></label>
<g:textField name="reEmail"/>
您只需要在表单中为第二封电子邮件添加另一个字段参数
<label for="reEmail" id="reEmail">
<g:message code="myUser.reEnter.label" default="Re-enter Email:" id="reEnter"/></label>
<g:textField name="reEmail"/>
// simple function to check if a email is of a valid email type
function IsEmail(email) {
var regex = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
return regex.test(email);
}
// method to check if email and confermation email is the same.
$("#signupForm").validate({
rules: {
...snip...
email1: {
required: true,
minlength: 5
},
email2: {
required: true,
minlength: 5,
equalTo: "#email1"
},
...snip...
},
messages: {
...snip...
email: {
required: "Please provide a email",
minlength: "Your email must be at least 5 characters long"
},
email2: {
required: "Please provide a confermation email",
minlength: "Your confermation email must be at least 5 characters long",
equalTo: "Please enter the same email as above"
},
...snip...
}
});另一种选择是使用。它们让您的表单post作为单个对象返回,可以进行约束和自定义验证(就像域类一样)。然后,一旦您对用户的输入感到满意,您就可以用命令对象的值更新域对象
<label for="reEmail" id="reEmail">
<g:message code="myUser.reEnter.label" default="Re-enter Email:" id="reEnter"/></label>
<g:textField name="reEmail"/>
当您有一种表单类型在几个地方提交时,命令对象非常有用(例如,用户注册和更新用户详细信息,其中两种表单相似,因此您可以重用命令对象)。或者当您的页面上有更新多个域对象的表单,或者表单与域对象的比例不是很好
<label for="reEmail" id="reEmail">
<g:message code="myUser.reEnter.label" default="Re-enter Email:" id="reEnter"/></label>
<g:textField name="reEmail"/>
我不知道我解释得有多好,但它们很值得了解。尽管它们在您的用例中可能有过多的杀伤力
<label for="reEmail" id="reEmail">
<g:message code="myUser.reEnter.label" default="Re-enter Email:" id="reEnter"/></label>
<g:textField name="reEmail"/>
此页面有一个示例,它两次使用密码并对其进行比较:如果是电子邮件确认,我认为您可以在服务器端完全忘记它。它永远不会阻止恶意攻击者,因此正如您所说,它不值得在域类中占有一席之地。重新输入只会帮助错误的用户,因此我认为在cli中使用javascript耳鼻喉科方面已经足够好了
<label for="reEmail" id="reEmail">
<g:message code="myUser.reEnter.label" default="Re-enter Email:" id="reEnter"/></label>
<g:textField name="reEmail"/>
通过这种方式,我认为您可以简单地使用这样的解决方案。恐怕没有什么特定于grails的
<label for="reEmail" id="reEmail">
<g:message code="myUser.reEnter.label" default="Re-enter Email:" id="reEnter"/></label>
<g:textField name="reEmail"/>
您也可以在此处找到电子邮件地址。谢谢。但如果我不想再次定义“电子邮件”,该怎么办在我的域类中?是否有任何方法可以使用类似jQuery的东西来处理此问题?当然,您可以在jQuery中进行处理,事实上有几种方法来处理此问题。这只是一个建议,非常适合“标准”grails。只需小心在视图中放置太多的业务逻辑。视图应该用于查看。比如@MichaelJ.Lee me第二,有几种方法可以做到这一点。你可以做的一件事是在客户端处理表单提交。在你进行服务器端调用之前,你可以比较这两封电子邮件,如果它们匹配,就会显示警报。另一种方法是处理第二封电子邮件上的focusout事件,然后触发jQuery代码来比较这两封电子邮件s、 希望这有帮助。另外,一个trasient允许您从服务器端进行验证,以防js被破坏或禁用。谢谢!我最终使用了这个解决方案。:)谢谢,但我认为这是为了验证电子邮件格式。我需要检查我的用户键入的两封电子邮件是否相互匹配。
<label for="reEmail" id="reEmail">
<g:message code="myUser.reEnter.label" default="Re-enter Email:" id="reEnter"/></label>
<g:textField name="reEmail"/>