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"/>