「引数が String
型でない時」の条件が抜けていますが、「String
型に変換して評価する」でいいのでしょうか。
自己解決されたコードでもいいと思いますが、文字数もチェックすると長大な文字列を判定するときの結果が早く出そうですね。
JavaScript
1'use strict';
2function checkAbc (string) {
3 return /^[abcABC]{0,6}$/.test(string) && !/([abcABC])[abcABC]*\1/.test(string);
4}
5
6console.log(checkAbc('')); // true
7console.log(checkAbc('aBc')); // true
8console.log(checkAbc('BaCAbc')); // true
9console.log(checkAbc('aA')); // true
10console.log(checkAbc('aa')); // false
スマートなコードとなると汎用性が高いコードだと個人的には考えていますが、いろいろと書き方があります。
コードが長くても汎用性の高いコードは美しいと思います。
JavaScript
1'use strict';
2var checkString1 = (function (String, RegExp){
3 return function checkString1 (characterClass, string) {
4 var l;
5
6 characterClass = String(characterClass);
7 string = String(string);
8 l = characterClass.length;
9
10 if (string.length > l) {
11 return false;
12 }
13
14 characterClass = '[' + characterClass.replace(/(?=\W)/g, '\\') + ']';
15
16 return new RegExp('^' + characterClass + '{0,' + l + '}$').test(string) && !(new RegExp('(' + characterClass + ')' + characterClass + '*\\1').test(string));
17 };
18}(String, RegExp));
19
20var checkString2 = (function (String, RegExp){
21 return function checkString2 (characterClass, string) {
22 var cl, l, i, char;
23
24 characterClass = String(characterClass);
25 string = String(string);
26 cl = characterClass.length;
27 l = string.length;
28
29 if (l > cl) {
30 return false;
31 }
32
33 i = 0;
34
35 while (i < l) {
36 char = string[i++];
37
38 if (characterClass.indexOf(char) === -1) {
39 return false;
40 }
41
42 characterClass = characterClass.replace(new RegExp(char.replace(/(?=\W)/, '\\'), 'g'), '');
43 }
44
45 return true;
46 };
47}(String, RegExp));
48
49console.log(checkString1('abcABC', '')); // true
50console.log(checkString1('abcABC', 'aBc')); // true
51console.log(checkString1('abcABC', 'BaCAbc')); // true
52console.log(checkString1('abcABC', 'aA')); // true
53console.log(checkString1('abcABC', 'aa')); // false
54
55console.log(checkString2('abcABC', '')); // true
56console.log(checkString2('abcABC', 'aBc')); // true
57console.log(checkString2('abcABC', 'BaCAbc')); // true
58console.log(checkString2('abcABC', 'aA')); // true
59console.log(checkString2('abcABC', 'aa')); // false
Re: miu_ras さん
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/01/24 09:47 編集
2016/01/25 00:45