Simple and generic mask routine.
[UPDATED CODE AND HELP CAN BE FOUND HERE]
@REQUIRES
Event-Listener 1
2 // REQUIRES: http://jsfromhell.com/geral/event-listener
3
4 //+ Jonas Raoni Soares Silva
5 //@ http://jsfromhell.com/forms/masked-input [v1.0]
6
7 MaskInput = function(f, m){ //v1.0
8 function mask(e){
9 var patterns = {"1": /[A-Z]/i, "2": /[0-9]/, "4": /[À-ÿ]/i, "8": /./ },
10 rules = { "a": 3, "A": 7, "9": 2, "C":5, "c": 1, "*": 8};
11 function accept(c, rule){
12 for(var i = 1, r = rules[rule] || 0; i <= r; i<<=1)
13 if(r & i && patterns[i].test(c))
14 break;
15 return i <= r || c == rule;
16 }
17 var k, mC, r, c = String.fromCharCode(k = e.key), l = f.value.length;
18 (!k || k == 8 ? 1 : (r = /^(.)\^(.*)$/.exec(m)) && (r[0] = r[2].indexOf(c) + 1) + 1 ?
19 r[1] == "O" ? r[0] : r[1] == "E" ? !r[0] : accept(c, r[1]) || r[0]
20 : (l = (f.value += m.substr(l, (r = /[A|9|C|\*]/i.exec(m.substr(l))) ?
21 r.index : l)).length) < m.length && accept(c, m.charAt(l))) || e.preventDefault();
22 }
23 for(var i in !/^(.)\^(.*)$/.test(m) && (f.maxLength = m.length), {keypress: 0, keyup: 1})
24 addEvent(f, i, mask);
25 };
26
27 //]]>
28 </script>
Usage (sorry, i'm lazy to write a help hahaha)
1
2 <form action="">
3 telephone "(99)9999-9999"
4
5 <input type="text" />
6
7 date "99/99/9999"
8
9 <input type="text" />
10
11
12 máscara = letter + letter withou accent + 2 numbers + "-" + anything + letter "Cc99-*C"
13
14 <input type="text" />
15
16
17 everything, but a, b or c "E^abc"
18
19 <input type="text" />
20
21
22 only a, b or c "O^abc"
23
24 <input type="text" />
25
26
27 just letters "C^"
28
29 <input type="text" />
30
31
32 just letters and also white-space "C^ "
33
34 <input type="text" />
35
36
37 just numbers and also the letters a, b e c "9^abc"
38
39 <input type="text" />
40
41 </form>
42
43 <script>
44 with( document.forms[0] ){
45 MaskedInput.apply( elements[0], '(99)9999-9999' );
46 MaskedInput.apply( elements[1], '99/99/9999' );
47 MaskedInput.apply( elements[2], 'Cc99-*C' );
48 MaskedInput.apply( elements[3], 'E^abc' );
49 MaskedInput.apply( elements[4], 'O^abc' );
50 MaskedInput.apply( elements[5], 'C^' );
51 MaskedInput.apply( elements[6], 'C^ ' );
52 MaskedInput.apply( elements[7], '9^abc' );
53 }
54 </script>
55