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 に答える