JavaScriptで文字列の中の数字(ID)を正規表現でチェック後に取り出す
JavaScriptでBOTスクリプトを開発していて、ユーザーが
誤って登録したtodoを、「del ID」形式で手動削除する場合
に考えて実装してみたことを備忘録としてまとめる(ΦωΦ)
[手順]
1.手動で削除するコマンドを正規表現を使用して実装。
if (text.match(/DEL\s([0-9]+$/i)) {
2.1で与えたID部分のみを取得。
var result = text.match(/DEL\s([0-9]+$/i);
console.log(result[1]); --- delコマンド実行で指定したIDが出力される
3.削除機能の関数に2で取り出したIDを付与。
deleteTodo(result[1]);
[参考サイト]
javascript.programmer-reference.com
JavaScriptで文字列の分割と切り出しについて
JavaScriptとPHPを行ったり来たりしてると、どっちが
どっちか分からなくなるため、文字列の切り出し方法に
ついてメモしておく(ΦωΦ)
[手順]
1.sliceを使って文字列を切り出す。
[書式]
var str = 文字列;
str.slice(開始位置, 終了位置);
(ex)先頭から4文字目までを切り出し
var str = 'user-123';
// 0~4文字目までの範囲を指定
var result = str.slice(0,4);
console.log(result);
※「user」が表示されればOK。
(ex)マイナス値で指定
var str = 'user-123';
var result = (-2,4);
console.log(result);
※sliceの場合はマイナス値で指定すると、無条件に0に置換。
※よって、結果は上記と同様「user」になる。
2.substrを使って文字列を切り出す。
[書式]
var str = 文字列;
str.substr(開始位置,文字数);
(ex)先頭から4文字目までを切り出し
var str = 'user-123';
var result = str.substr(0,4);
console.log(result);
※結果
「user」が表示されればOK。
(ex)文字数を省略
var str = 'user-123';
var result = str.substr(5);
console.log(result);
※開始位置から末尾まで全対象になるので「123」が表示。
(ex)マイナス値で指定
var str = 'user-123';
var result = str.substr(-3):
console.log(result);
※開始位置にマイナス値を指定すると、全体の文字数から開始位置
を引いた数になるので「123」が表示。
3.substringを使って文字列を切り出す。
[書式]
var str = 文字列;
str.substring(開始位置, 終了位置);
(ex)先頭から4文字目までを切り出し
var str = 'user-123';
var result = str.substring(0, 4);
console.log(result);
※結果
「user」が表示されていればOK。
(ex)マイナス値を指定
var str = 'user-123';
var result = str.substring(-2, 4);
console.log(result);
※開始位置のマイナス値は無条件に0に置換されるため、
「0,4」と同じ意味になる。
※よって、結果は「user」になる。
(ex)終了位置より開始位置の数字が大きい
var str = 'user-123';
var result = str.substring(4,0);
console.log(result);
※開始位置の数字が終了位置より大の場合は、自動的に反転
して変更されるため、「0,4」と同じ意味になる。
※よって、結果は「user」になる。
[参考サイト]
JavaScriptで日付を0埋めで2桁で取得するには
後から後からユーザーから追加される機能を実装してて
日付を0埋めの2桁ずつで取得しておいたほうが処理が
実装しやすいことに気づいたので、0埋めの方法を
メモしておく(ΦωΦ)
[手順]
1.月の先頭に”0”を付けてから2桁に直す。
var month = ("0"+(date.getMonth() + 1)).slice(-2);
2.日の先頭に"0"を付けてから2桁に直す。
var day = ("0"+date.getDate()).slice(-2);
[参考サイト]
テスト用にCentOS6.5の日付をずらす
以前、CentOS7.xでテスト用に日付をずらす場合はメモした。
今回、使用するのはCentOS6.5なため、同様に調べてみた。
[手順]
1. MMDDhhmm形式で設定。
[書式]
date [-u | --utc | --universal] [MMDDhhmm[[CC]YY][.ss]]
[意味]
MM --- 月
DD --- 日
hh --- 時
mm --- 分
CC --- 年の最初2文字(省略可能)
YY --- 年の最後2文字(省略可能)
ss --- 秒(省略可能)
※UTCを設定する場合は[-u | --utc | --universal]オプションのいずれかを
選択して使用。
[使い方]
(ex)2017年5月30日 18:00に設定
# date 053018002017
2017年 5月30日 火曜日 18:00:00 JST
※年を指定する場合の順番に注意が必要。
2. -sまたは--setオプションを指定して設定。
一般的な日時・時刻表記を使用して設定を行える。
[書式]
date [-s | --set] 年月日表示
(ex)2017年5月30日 18:00 に設定
# date --set "2017-05-30 18:00:00"
# date --set "2017/05/30 18:00:00"
# date --set "05/30 18:00:00 2017"
2017年 5月30日 火曜日 18:00:00 JST
※時刻を指定せずに日時を設定した場合、時刻が00:00:00に設定されてしまう
ことに注意。
[参考サイト]
"date" 日付・時刻の設定 その2 @LCD -Linux Command Dictionary-|Replog!株式会社レップワンスタッフによるブログです
PHPで扱える日付とその使い方について
並行してNode.js+BOTスクリプトを開発しているため、
なかなかPHPに頭が切り替わらなくて日付の扱い方というか
date()関数を使うのは覚えてたけど、今日を起点に何日後(前)を
算出する方法や日付文字列と日付の比較をする場合の取り扱い
が思い出せなかったwww(ΦωΦ;)
まとめは今の作業後に行うので、とりあえず参考リンク
先だけメモしておく。
[使い方]
(ex)csvファイルを読み込んで配列に取得した日付文字列を、0埋めの日付にformat
$target_date = (date('Y/m/d', strtotime($arr_val["date"])));
(ex)当日日付を「/」でformat
$today = date('Y/m/d');
(ex)当日から7日後の日付
$sevenDaysAfter = date('Y/m/d', strtotime('+1 week'));
$sevenDaysAfter = date('Y/m/d', strtotime('+7 days'));
$sevenDaysAfter = date('Y/m/d', mktime(0,0,0, date('m'), date('d') + 7, date('Y)));
[参考サイト]
phpのstrtotime関数を使って文字列を日付型に整形する « kawama.jp
JavaScriptの配列と連想配列とオブジェクトについて
自分の中で、JavaScriptの配列とオブジェクトがよく
分かってなかったので、今後、混乱しないためにも
要点をまとめてみた分をメモしておく(ΦωΦ)
[メモ]
・JavaScriptの連想配列はオブジェクトの一種。
・JavaScriptではJSONもオブジェクトの一種。
・JavaScriptでは、すべてのオブジェクトは連想配列。
・配列の初期化は「[ ]」、連想配列の初期化は「{}」
※但し、連想配列の添字にも「[ ]」を使う。下記参照。
・連想配列の書式
var array = {key: value, key: value ... }
※valueには、文字列、数値、関数、オブジェクトを設定可能
・連想配列で要素を追加する場合、pushは利用不可。
・連想配列の要素追加方法
(ex)ユーザー情報にkey=countryで国情報を追加
var user = {name: 'Taro', age: 32, tel: '080-1234-5678'};
(1)チェーンで追加
user.country = 'Japan';
-> ドット(.)で設定したキー名称を繋げて値を追加。
(2)添字で追加
user['country'] = 'Japan';
-> 配列のように[]を使用し、キー名称を指定して値を追加。
・連想配列の要素削除方法
(ex)書式
delete array[key]
(ex)下記の連想配列からkey=bananaを削除
var arr = {apple: '400yen', banana: '300yen', cake: '600yen'};
delete arr['banana'];
console(arr);
※要素削除後の連想配列の中身
Object{apple: '400yen', cake: '600yen'}
・連想配列の値を取得
(ex)下記の連想配列からkey=nameを取得
var user = {name: 'Taro', age: 32, tel: '080-1234-5678'};
※添字を使用
console.log(user['name']);
※ドット(.)を使用
console.log(user.name);
・連想配列のキー項目の取得方法
簡単な方法はObject.keysを使用。
(ex)書式
Object.keys(args=連想配列)
(ex)下記連想配列のキー項目を取得
var user = {name: 'Taro', age: 32, tel: '080-1234-5678'};
var key = Object.keys(user);
console.log(key);
※実行結果
name,age,telが返却
※配列のように、key[1]で取得も可能
・連想配列のforループ
・for...inでループ処理
少ない記述で効率よくkeyやvalueを取得・設定可能。
(ex)書式
for (var 変数 in 連想配列) {}
(ex)下記連想配列からkey項目を取得
var user = {name: 'Taro', age: 32, tel: '080-1234-5678'};
for (var key in user) {
console.log(key);
}
※実行結果
name
age
tel
・forEachでループ処理
連想配列で使用する場合、Object.keys()を使用し、連想配列の
キー名称(key)だけを一時的に配列へ格納。
(ex)書式
Object.keys(①連想配列).forEach(②callback,③連想配列)
①連想配列のキー名称を配列化
②ループ処理、無名関数
③ループ処理内のthisが連想配列を指す
var arr = {apple: '400yen', banana: '300yen', cake: '600yen'};
①Object.keys(arr).forEach(function (②value) {
console.log(value + ':' + this[value]);
}, ③arr);
①連想配列を配列に変換
②forEachの実行で、valueにkeys(key項目)が格納
③第2引数に連想配列のarrを指定 -> ループ処理内のthisとイコール
※実行結果
apple: 400yen
banana: 300yen
cake: 600yen
・連想配列のソート
・連想配列のkeyを使用したソート
(ex)キーを取得
var user = {name: 'Taro', age: 32, tel: '080-1234-5678'};
①var result = {};
②var key = Object.keys(user);
key.sort();
①ソート後の連想配列を格納する変数②連想配列を配列データとして格納
(ex)ソートした順番で変数「result」に連想配列を格納
for(var i=0; i<key.length; i++) {
①result[key[i]] = user[key[i]];
}
console.log(result);
①元になる連想配列「user」と新規作成する「result」の
それぞれの添字をソート後の変数「key」に統一
※実行結果
{'age': 32, 'name': 'Taro', tel: '080-1234-5678'}
・複数の連想配列をソート
(ex)配列内の複数の連想配列が存在
var fruits = [
{store: 'first-shop', apple: '400yen', banana: '300yen', cake: '400yen'},
{store: 'second-shop', apple: '200yen', banana: '400yen', cake: '600yen'},
{store: 'third-shop', apple: '600yen', banana: '500yen', cake: '200yen'},
];
(ex)各店舗のappleの価格を比較して安い価格順にソート
①fruits.sort(function(a, b) {
②return a.apple < b.apple ? -1 : 1;
});
console.log(fruits);
※実行結果
0: {store: 'second-shop', apple: '200yen', banana: '400yen', cake: '600yen'}
1: {store: 'first-shop', apple: '400yen', banana: '300yen', cake: '400yen'}
2: {store: 'third-shop', apple: '600yen', banana: '500yen', cake: '200yen'}
①sort()で関数を利用し、それぞれの連想配列にある「apple」の価格を比較
②引数a,bには順番に連想配列を格納。
=>a.apple: 0番目のappleの値、b.apple: 1番目の値
それぞれの値を比較し、0より小は-1, 0より大は1を返却
[参考サイト]
Javascriptって2次元の連想配列できないの? « ウップス!!なかわけ
JavaScriptによる多次元連想配列 multidimensional-array associative-array | コードサンプル [日本語]
Node.jsでMySQLから日付を取り出したらdatetime形式じゃなかったので、変換する関数つくった
日付を出力する必要があったので、取得した内容を
検証用に出力してみたら、datetime形式ではなく、
なんじゃこりゃー!!!(ΦωΦ;)
って内容に自動変換されてたw
ちなみに、こんな感じw
(ex)2018/08/20 17:00:00
INSERTやUPDATE時は問題ないのに、SELECTして
内容を出力すると自動変換される?らしい。
JSONを経由すると自動変換されるらしいという情報も
見たw ただでさえ配列で気持ち悪くなってるのに!
勝手なことしてんじゃねー!!!
って思ったので、まず実行前に参考サイトをメモってみる。
実装後に手順については更新予定。
普通に、スペースで文字列を切り出して「yyyy/mm/dd hh:mm:ss」
にフォーマットする関数を作って対応したw(ΦωΦ)
[手順]
1. splitでISO形式に変換された日付を正規表現を使用しspaceで分割。
var separatorString = /\s/;
var arrString = strDate.split(separatorString);
2. 切り出したmonthを0埋めの数字に変換。
(ex)'Aug' -> '08'
3. formatを「yyyy/mm/dd hh:mm:ss」にして値を返却するように実装。
var ret = arrString[3] + '/' + arrString[1] + '/' + arrString[2] + ' ' + arrString[4];
[参考サイト]