Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在extjs中扩展电子邮件验证_Javascript_Extjs - Fatal编程技术网

Javascript 在extjs中扩展电子邮件验证

Javascript 在extjs中扩展电子邮件验证,javascript,extjs,Javascript,Extjs,我在6.0.1.250版本的ExtJs中构建了以下用户注册表单。我有一个电子邮件字段,它接受.co,.com直到四个字符。我需要处理最近的tld,并希望覆盖电子邮件验证逻辑。我尝试使用验证器并应用正则表达式,但regexText不支持国际化。如何扩展电子邮件验证。我使用的是6.0版本的extjs框架。下面是UserForm的代码片段 Ext.define('myApp.view.users.NewUserForm', { extend: 'Ext.panel.Panel', xtype: 'ne

我在6.0.1.250版本的ExtJs中构建了以下用户注册表单。我有一个电子邮件字段,它接受
.co
.com
直到四个字符。我需要处理最近的
tld
,并希望覆盖电子邮件验证逻辑。我尝试使用
验证器
并应用正则表达式,但
regexText
不支持国际化。如何扩展
电子邮件
验证。我使用的是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'
  }]
});
Ext.define('myApp.view.users.NewUserForm'{
扩展:“Ext.panel.panel”,
xtype:'newuser',
标题:“*”+l10n(“新用户”),
项目:[{
xtype:'textfield',
字段标签:'*'+l10n('name'),
名称:“用户名”,
最大长度:80,
allowBlank:false
}, {
xtype:'textfield',
输入类型:“密码”,
字段标签:'*'+l10n('password'),
名称:'password1',
vtype:“密码”,
initialPassField:'password2',
allowBlank:false,
maskRe://[^]/
}, {
xtype:'textfield',
字段标签:'*'+l10n('confirm-password'),
vtype:“密码”,
输入类型:“密码”,
名称:'password2',
initialPassField:'password1',
allowBlank:false,
maskRe://[^]/
}, {
xtype:'textfield',
字段标签:'*'+l10n('电子邮件地址'),
名称:'电子邮件地址',
vtype:“电子邮件”,
allowBlank:false
}, {
xtype:'textarea',
字段标签:l10n(“说明”),
名称:'userDescription'
}]
});

您可以覆盖电子邮件验证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);
    }
});
我使用了默认的电子邮件正则表达式,并对其进行了更改,使其允许域名包含2到10个字符

编辑


如果您使用Sencha CMD,则有一个特殊的
覆盖
文件夹,您应该在其中放置覆盖。因此,您可以创建一个名为
Vtypes.js
的文件,将代码放在那里,然后在
sencha应用程序刷新后就可以了。如果没有-在使用实际vtype之前,应该基本上执行覆盖。在
应用程序.js
中,您可能有一个名为
applyOverrides
的方法,然后首先从您的方法调用它。

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

{
   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
}
{
xtype:'textfield',
字段标签:'*'+l10n('电子邮件地址'),
名称:'电子邮件地址',
正则表达式:/^(“)(?:[^\.”])(?:(?:[\.]))(?:[\w\-!\$%&'*+\/=?\^`{124}}])*\ 1@(\w[\-\w]*\){1,5}([A-Za-z]){2,6}$/,,
allowBlank:false
}

您使用的框架的确切版本是什么?我从6.0.0.540版一直测试到6.5版,在所有情况下,它最多可以接受5个字符的域名。版本是6.0.1.250。我需要在我共享的代码段中将上述函数放在哪里。我不熟悉javascriptI,我不使用Sencha CMD。我确实看到了Application.js,但是那里没有applyOverrides函数。您自己创建一个,并从
launch
调用
applyOverrides
函数中应该包含的内容。如何从
applyOverrides
函数调用您提供的函数。我在这里遗漏了什么。是的,在它里面你会有答案中提供的
Ext.define..
代码。小提琴: