我有一个像这样的自定义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值分配给模板中的视图呢?
先谢谢!
答案 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>