1

我有一个像这样的自定义 emberjs 字段

App.NameTextField = App.FieldView.extend({
ValidationText: '',
IsValid: function(){
    var valText = this.get('ValidationText');
    return valText == '';
}.property(),
Regex: null,
DataView: Ember.TextField.extend({
    nameValue: function(){
        return App.FormContact.get('FirstName');
    }.property(),
    ValidationMessages: {Req: 'this is required. fill it in.', Invalid: 'invalid name', Valid: ''},
    valueBinding: 'nameValue',
    Regex: function(){
        return this.get('parentView').get('Regex');
    }.property(),
    IsRequired: function(){
        return this.get('parentView').get('IsRequired');
    }.property(),
    focusOut: function(){
        var reg = new RegExp(this.get('Regex'));
        var val = this.get('value');
        var validMsg = validateName(this.get('IsRequired'), val, reg);
        this.get('parentView').set('ValidationText', this.ValidationMessages[validMsg]);
    }
})

});

在前端,我像这样分配正则表达式:

 <p>{{view Rewards.NameTextField size="50px" label="First Name" Regex="/^[A-Za-z-'.\s]+$/"}}</p>

这是一个问题,因为当我在 DataView 中执行“this.get('Regex')”时,它的计算结果为

//^[A-Za-z-'.\s]+$//

导致我的正则表达式评估不正确。那么我如何动态地将正则表达式值分配给模板中的视图?

提前致谢!

4

2 回答 2

2

我正要建议删除斜线,但您的角色类中也有一个未转义的连字符。这将无法匹配文字-字符。如果您希望按字面处理最后一个连字符,则应将正则表达式更改为以下之一:

  • ^[A-Za-z'.\s-]+$- 最后的连字符
  • ^[-A-Za-z'.\s]+$- 连字符开头
  • ^[A-Za-z\-'.\s]+$- 转义的连字符

我在 Stack Overflow 上经常看到这个错误。查看来自 regular-expressions.info 的这篇文章,了解连字符在字符类中的工作原理(请参阅“字符类中的元字符”部分)。

于 2012-04-17T18:03:07.583 回答
0

我在开头和结尾删除了斜线,所以现在它只是Regex="^[A-Za-z-'.\s]+$"并且它正在工作!在 App js 中获取正则表达式值时,斜线会导致额外的斜线。结果是

<p>{{view Rewards.NameTextField size="50px" label="First Name" Regex="^[A-Za-z-'.\s]+$"}}    </p>
于 2012-04-17T17:47:31.497 回答