0

にオートフォーマッタを実装しようとしてJSいます。これにより、指定された値 (例: 12345678) と指定された形式 (例: XX.XX.XXOR XX-XX-XXOR XX/XX/XXOR XXX-XXXX) がある場合、初期値を指定された形式のいずれかに自動フォーマットできます。 .

必要な形式はさまざまであるため、任意の形式を取り、一致するように元の値を再フォーマットできる必要があります。

それが可能かどうか、またはどうすればよいかわかりません。どんな助けでも感謝します。

ありがとう、

クララ

4

3 に答える 3

16

これはあなたのために働くはずです

var value = '12345678';

// 12345678 => 12.34.56.78
console.log(value.replace(/(\d{2})(?=\d)/g, '$1.'));

// 12345678 => 12/34/56/78
console.log(value.replace(/(\d{2})(?=\d)/g, '$1/'));

// 12345678 => 12-34-56-78
console.log(value.replace(/(\d{2})(?=\d)/g, '$1-'));

// 12345678 => 1234-5678
console.log(value.replace(/(\d{4})(?=\d)/g, '$1-'));

// a more complex format (create US phone number)
// 1234567890 => +1 (123)-456-7890
console.log('1234567890'.replace(/^(\d{3})(\d{3})(\d{4})$/g, '+1 ($1)-$2-$3'));
于 2013-01-09T08:51:45.587 に答える
9

このようなもの ?

function format(mask, number) {
   var s = ''+number, r = '';
   for (var im=0, is = 0; im<mask.length && is<s.length; im++) {
     r += mask.charAt(im)=='X' ? s.charAt(is++) : mask.charAt(im);
   }
   return r;
}    

console.log(format('XX.XX.XX', 12345678)); // logs "12.34.56" 
console.log(format('XXX-XXXX', 12345678)); // logs "123-4567"
console.log(format('XX-XX-XX', 12345678)); // logs "12-34-56 "
console.log(format('XX/XX/XX', 12345678)); // logs "12/34/56"
console.log(format('XX/XX/XX/XX/XX', 12345678)); // logs "12/34/56/78"

このコードの作成において、正規表現エンジンに害はありませんでした。

フィドル

于 2013-01-09T08:58:45.853 に答える
0

次のように、フォーマットから正規表現を自動的に構築できます。

var format = 'XX-XX-XX';
var string = '111111';
var regex = '';

for(var i = 1; format.indexOf('X') >= 0; i++){
    format = format.replace('X', '$'+i);
    regex += '(\\d)'; // to match a digit enclosed in ()
}

または関数として:

function format(string, format){
    var regex = '';

    for(var i = 1; format.indexOf('X') >= 0; ++i){
        format = format.replace('X', '$'+i);
        regex += '(\\d)';
    }
    regex += '[^]*'; // Match the rest of the string to crop characters overflowing the format.
// Remove this ^ line if you want `format('12345678', 'XX/XX/XX')` to return `12/34/5678` instead of `12/34/56`;
    return string.replace(new RegExp(regex), format);
}


console.log(format('111111', 'XX-XX-XX'));  // 11-11-11
console.log(format('111111', 'XX.XX.XX'));  // 11.11.11 
console.log(format('1111111', 'XXX-XXXX')); // 111-1111
console.log(format('111111', 'XX-XX-XX'));  // 11-11-11
console.log(format('111111', 'XX/XX/XX'));  // 11/11/11
console.log(format('123456789', 'XX/XX/XX'));  // 12/34/56 (789 are cropped off.)
于 2013-01-09T08:59:29.577 に答える