// 全角数字を半角数字に変換(toHalfNum)は下記のサイトのスクリプトを利用。 // http://ameblo.jp/pclindesk/entry-10110151969.html function myError(str) { $('#error').text(str); } $('#date').blur(function(evt) { var i, now = new Date(), resultHtml = '', rows = [], dayOfWeek = ['日', '月', '火', '水', '木', '金', '土'], createNewSubStr = function() { // 空白を削除 arguments[0] = arguments[0].replace(/ /, ''); // 文字列が数字のみ if (arguments[0].match(/[^0-9]/) == null) { // 月は0(1月)~11(12月) ※ 日は1~始まる var year = now.getFullYear(), // getYearはブラウザによって挙動が異なる date = new Date(year, month, arguments[0]); resultHtml += arguments[0] + '日(' + dayOfWeek[date.getDay()] + ')<br>' + '\n'; } else { resultHtml += arguments[0] + '<br>' + '\n'; } // 全角(を半角へ( // resultHtml = resultHtml.replace(/(/g, '('); // 全角)を半角)へ // resultHtml = resultHtml.replace(/)/g, ')'); // 31(火)を31日(火)へ resultHtml = resultHtml.replace(/([0-9]+)\(/g, '$1日(') }, // 全角数字を半角数字へ変換 // 下記のサイトのスクリプト // http://ameblo.jp/pclindesk/entry-10110151969.html toHalfNum = function(src) { return src.replace(/[.0-9()]/g, function(wc) { var zen = ".。0123456789()", han = "..0123456789()"; return han[zen.indexOf(wc)]; }); }; // 月の処理(月は0〜11) if ($('#month').val() !== '') { if (12 < parseInt($('#month').val(), 10)) { myError('1〜12を入力'); return false; } month = parseInt($('#month').val(), 10) - 1; } else { month = now.getMonth(); } // 改行で分割 rows = $(this).val().split('\n'); // 行ごとの処理 for (i = 0; i < rows.length; i++) { // 全角数字を半角数字へ var row = toHalfNum(rows[i]); // 区切文字(連続)を空白(1つ)へ統一 row = row.replace(/(\s|[,、])+/g, ' '); // マッチと加工 row.replace(/([^ ]+)( |$)?/g, createNewSubStr); resultHtml += '\n'; } $('#result').text(resultHtml); });
<div id="example"> <p> 変換前<br> 名前1 1 10 30<br> 名前2 1、 10、30 </p> <p> 変換後<br> 名前1<br><br> 1日(日)<br><br> 10日(火)<br><br> 30日(月)<br><br> <br> 名前2<br><br> 1日(日)<br><br> 10日(火)<br><br> 30日(月)<br><br> </p> </div> <div id="error"></div> <div id="formarea"> <fieldset> <label for="month">Month</label> <input id="month" name="month" type="text" size="2"> 1〜12 ※空白は今月を指定 </fieldset> <fieldset> <label for="date">変換前</label><br /> <textarea id="date" rows="4" cols="30"></textarea> </fieldset> <fieldset> <label for="result">変換後(HTML)</label><br /> <textarea id="result" rows="4" cols="30"></textarea> </fieldset> </div>
body { margin: 15px; } p { margin-bottom: 12px; } #error { color: #990000; } input { padding: 2px; line-height: 1.5; } fieldset { margin-bottom: 12px; } #example { font-size: 85%; margin-bottom: 30px; }