在extjs中扩展电子邮件验证

时间:2017-09-07 06:22:53

标签: javascript extjs

我在Extjs的6.0.1.250版本中构建了以下用户注册表单。我有一个电子邮件字段,接受.co.com直到四个字符。我需要处理最近的tlds并想要覆盖电子邮件验证逻辑。我尝试使用validator并应用正则表达式,但regexText不支持国际化。如何扩展email验证。我正在使用6.0版本的extjs框架。以下是UserForm

的代码段
Ext.define('myApp.view.users.NewUserForm', {
extend: 'Ext.panel.Panel',
xtype: 'newuser',
title: '<span class="red-label">*</span>'+ l10n('new-user'),
items: [{
    xtype: 'textfield',
    fieldLabel: '<span class="red-label">*</span>' + l10n('name'),
    name: 'username',
    maxLength: 80,
    allowBlank: false
}, {
    xtype: 'textfield',
    inputType: 'password',
    fieldLabel: '<span class="red-label">*</span>' + l10n('password'),
    name: 'password1',
    vtype: 'password',
    initialPassField: 'password2',
    allowBlank: false,
    maskRe: /[^ ]/
}, {
    xtype: 'textfield',
    fieldLabel: '<span class="red-label">*</span>' + l10n('confirm-password'),
    vtype: 'password',
    inputType: 'password',
    name: 'password2',
    initialPassField: 'password1',
    allowBlank: false,
    maskRe: /[^ ]/
}, {
    xtype: 'textfield',
    fieldLabel: '<span class="red-label">*</span>' + l10n('e-mail-address'),
    name: 'emailAddress',
    vtype:'email',
    allowBlank: false
}, {
    xtype: 'textarea',
    fieldLabel: l10n('description'),
    name: 'userDescription'
  }]
});

2 个答案:

答案 0 :(得分:2)

您可以像这样覆盖电子邮件验证vtype:

Ext.define(null, {
    override: 'Ext.form.field.VTypes',
    email: function (value) {
        return /^(")?(?:[^\."\s])(?:(?:[\.])?(?:[\w\-!#$%&'*+/=?^_`{|}~]))*\1@(\w[\-\w]*\.){1,5}([A-Za-z]){2,10}$/.test(value);
    }
});

我使用了默认的电子邮件regex并进行了更改,以便允许域名使用2到10个字符。

修改

如果您使用Sencha CMD,则有一个特殊的overrides文件夹,您应该在其中放置替代。因此,您可以创建一个名为Vtypes.js的文件,将代码放在那里,然后在sencha app refresh之后就可以了。如果不这样做 - 在使用实际的vtype之前,应该基本执行覆盖。您的applyOverrides中可能有一个名为Application.js的方法,然后通过launch方法调用它。

答案 1 :(得分:0)

我们可以使用以下简单方法解决以上问题:

{
   xtype: 'textfield',
   fieldLabel: '<span class="red-label">*</span>' + l10n('e-mail-address'),
   name: 'emailAddress',
   regex : /^(")?(?:[^\."])(?:(?:[\.])?(?:[\w\-!#$%&'*+\/=?\^_`{|}~]))*\1@(\w[\-\w]*\.){1,5}([A-Za-z]){2,6}$/,
   allowBlank: false
}