emberjs字段验证正则表达式

时间:2012-04-16 19:20:11

标签: regex validation ember.js

我有一个像这样的自定义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] + $ //

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

先谢谢!

2 个答案:

答案 0 :(得分:2)

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

  • ^[A-Za-z'.\s-]+$ - 结尾处的连字符
  • ^[-A-Za-z'.\s]+$ - 开头的连字符
  • ^[A-Za-z\-'.\s]+$ - 逃脱连字符

我在Stack Overflow上看到了很多错误。查看this article from regular-expressions.info,了解连字符在字符类中的工作原理(请参阅“字符类中的元字符”部分)。

答案 1 :(得分:0)

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

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