正規表現の条件は
- 手紙のみ
- スペースは 2 文字が入力された後にのみ許可されます
- スペースは 1 つだけ許可されます。複数のスペースは使用できません。助けてください。
今、私はこれを使用していますが、動作しません:
$('.name').keyup(function() {
this.value = this.value.replace(/[^A-Za-z]/g,'');
});
これは、要件に一致する最小のサブストリングを取得する正規表現です。
var reg = /[A-Za-z]{2}[A-Za-z]*[ ]?[A-Za-z]*/;
返されたサブ文字列を元の文字列と比較することで、ユーザー名の入力を検証できます。ここでそうするjsFiddleを作成します:http://jsfiddle.net/cjC5k/
必要な結果を得るには、複数の正規表現を使用する必要があると思います。また、ユーザーが自動置換を煩わしく感じるという @nnnnnn に同意します。
最適化できると思いますが、機能するソリューションを次に示します。
$( function() {
$('#test').keyup(function(){
//Remove all characters except letters and whitespace
this.value = this.value.replace(/[^A-Za-z\s]/g,'');
//Replace all instance of One or more whitespaces with a space
this.value = this.value.replace(/\s+/g,' ');
//Replace a space that happens after zero or one characters
this.value = this.value.replace(/^([a-zA-Z]{0,1})(\s)([a-zA-Z]+)/,'$1$3');
//Replaces any spaces that occur after the first space
this.value = this.value.replace(/^([a-zA-Z]{2,})(\s+)([a-zA-Z]+)(\s+)/,'$1$2$3');
});
});
これが機能することを示すjsfiddleです。http://jsfiddle.net/mattpaulsen/sSUhn/3/