content |
/**
* コメント用。引数を無視する。
*/
function comment(str) {
return "";
}
var hanStr = " !\"#$%'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~-";
var zenStr = " !”#$%’()*+,―./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|} ̄・";
var hanDigits = "0123456789-+";
var zenDigits = "0123456789―+";
/**
* 文字が半角または全角の数字か調べる。
* @param ch 文字
* @return 半角または全角の数字ならtrue、それ以外ならfalse
*/
function isDigitZ(ch) {
if (hanDigits.indexOf(ch) >= 0) return true;
return zenDigits.indexOf(ch) >= 0;
}
/**
* 半角または全角の数字で構成される文字列を浮動小数点数値に変換する。
* @param str 半角または全角の数字で構成される文字列
* @return 浮動小数点数値
*/
function parseFloatZ(str) {
var result = new Array(str.length);
for (var i = 0; i < str.length; i++) {
var ch = str.charAt(i);
var p = hanDigits.indexOf(ch);
if (p >= 0) {
result[i] = hanDigits[p];
} else {
p = zenDigits.indexOf(ch);
if (p >= 0) {
result[i] = hanDigits[p];
} else {
if (ch == '.' || ch == '.') result[i] = '.';
}
}
}
return parseFloat(result.join(""));
}
/**
* 文字列から数値を取り出す。
* @param str 文字列
* @param usefloat 浮動小数点数値を取り出すならtrue、整数値を取り出すならfalse。
* 浮動小数点数値として取り出す場合、半角・全角のピリオドを小数点と見なす。
* 数値と判断できなような複数のピリオドを含む場合は動作は保証されない。
* @return 浮動小数点数値または整数値の配列
*/
function pickupNumZ(str, usefloat) {
var nums = new Array();
var n = 0;
var s = -1;
var e = 0;
var inNum = false;
var fract = false;
var size = str.length;
for (var i = 0; i < size; i++) {
var ch = str.charAt(i);
if (isDigitZ(ch)) {
if (!inNum) s = i;
e = i;
inNum = true;
} else
if (usefloat && (ch == '.' || ch == '.')) {
if (inNum) {
if (fract) {
nums[n++] = parseFloatZ(str.substring(s, e+1));
inNum = false;
fract = false;
} else {
fract = true;
}
}
} else {
if (inNum) nums[n++] = parseFloatZ(str.substring(s, e+1));
inNum = false;
}
}
if (inNum) nums[n++] = parseFloatZ(str.substring(s, e+1));
return nums;
}
/**
* 1~2桁の数の前に"0"を補って2桁にする。
* @param num 1~2桁の数
* @return 2桁の数
*/
function toDigit2(num) {
return (num > 9) ? ""+ num : "0" + num;
}
/**
* 区切り文字の位置を返す。
* @param str 半角または全角の文字を含む文字列
* @param delimits 区切り文字となる文字を複数していした文字列。
* @return どれかの区切り文字が見つかればその位置を返す。区切り文字が無い場合は負値。
*/
function getDelimiterPos(str, delimits) {
for (var i = 0; i < str.length; i++)
if (delimits.indexOf(str.charAt(i)) >= 0)
return i;
return -1;
}
/**
* 区切り文字より前の文字列を返す。
* [例]
* cutTail("土浦小学校(大手町13-32)", "([{([{") => 土浦小学校
* @param str 半角または全角の文字を含む文字列
* @param delimits 区切り文字となる文字を複数していした文字列。
* @return 区切り文字よりも前の文字列。区切り文字無い場合は元の文字列。
*/
function cutTail(str, delimits) {
var p = getDelimiterPos(str, delimits);
return (p >= 0) ? str.substring(0, p) : str;
}
/**
* 区切り文字の間の文字列を返す。
* [例]
* getMiddle("土浦小学校(大手町13・32)", "([{([{", ")]})]}") == "大手町13・32"
* @param str 半角または全角の文字を含む文字列
* @param sd 前の区切り文字となる文字を複数していした文字列
* @param ed 後の区切り文字となる文字を複数していした文字列
* @return 区切り文字に挟まれた文字列。前の区切り文字がない場合は元の文字列。
*/
function getMiddle(str, sd, ed) {
var p = getDelimiterPos(str, sd);
if (p < 0) return str;
str = str.substring(p+1);
return cutTail(str, ed);
}
/*
* 区切り文字の外の文字列を返す。
*/
function delMiddle(str, sd, ed) {
var s = getDelimiterPos(str, sd);
if (s < 0) return str;
var e = getDelimiterPos(str, ed);
if (e < 0) return str;
return str.substring(0, s) + " " + str.substring(e + 1, str.length);
}
/**
* 文字列中で半角化可能な文字を全て半角にして返す。
* [例]
* toHankaku("土浦小学校(大手町13・32)") => 大手町13-32
* @param str 文字列
* @return 半角化可能な文字がすべて半角化された文字列
*/
function toHankaku(str) {
var result = new Array(str.length);
for (var i = 0; i < str.length; i++) {
var ch = str.charAt(i);
var p = zenStr.indexOf(ch);
if (p >= 0) {
result[i] = hanStr[p];
} else {
result[i] = ch;
}
}
return result.join("");
}
/**
* 文字列の途中以降を抽出する。
* substring1("平23",1) => "23"
*/
function substring1(str,begin) {
return str.substring(begin);
}
/**
* 文字列から一部を抽出する。
* substring2("平成23年",2,4) => "23"
*/
function substring2(str,begin,end) {
return str.substring(begin,end);
}
/**
* 文字列から最初に出現した固定小数点数値を抽出して返す。
* @param str 文字列 (string)
* @return 固定小数点数値の度数(double)
*/
function pickupNum(str) {
var size = str.length;
var s = -1;
var e = 0;
var fract = false;
for (var i = 0; i < size; i++) {
var ch = str.charAt(i);
if ('0' <= ch && ch <= '9') {
if (s < 0) s = i;
e = i;
} else
if (ch == '.') {
if (fract) break;
fract = true;
} else {
if (s >= 0) break;
}
}
if (s >= 0)
return parseFloat(str.substring(s, e+1));
else
return "";
}
/**
* 文字列から数値を抽出して出現順に配列にして返す。
* @param str 文字列 (string)
* @return 数値(double)の配列
*/
function pickupNums(str) {
var nums = new Array();
var n = 0;
var s = -1;
var e = 0;
var inNum = false;
var fract = false;
var size = str.length;
for (var i = 0; i < size; i++) {
var ch = str.charAt(i);
if ('0' <= ch && ch <= '9') {
if (!inNum) s = i;
e = i;
inNum = true;
} else
if (ch == '.') {
if (inNum) {
if (fract) {
nums[n++] = parseFloat(str.substring(s, e+1));
inNum = false;
fract = false;
} else {
fract = true;
}
}
} else {
if (inNum) nums[n++] = parseFloat(str.substring(s, e+1));
inNum = false;
fract = false;
}
}
if (inNum) nums[n++] = parseFloat(str.substring(s, e+1));
return nums;
}
/**
* 文字列から数値を1個以上取り出し、それらの平均値を求める。
*/
function average(str) {
var nums = pickupNums(str);
var n = nums.length;
var val = 0.0;
for (var i = 0; i < n; i++)
val += val[i];
return val / n;
}
/**
* 文字列1の先頭に文字列2が含まれていたらそれを除いた文字列を返す。
* 含まれていない場合は、文字列1を返す。
* 使用例: $removeStr2("茨城県つくば市","茨城県") => つくば市
* @param s1 文字列1
* @param s2 文字列2
* @return 文字列1の先頭の文字列2を取り除く
*/
function removeStr2(s1, s2) {
var i = s1.indexOf(s2);
if (i == 0) {
return s1.substring(s2.length);
} else {
return s1;
}
}
/*
* 全角文字列を半角文字列に変換する。
*/
function zen2han(input) {
han = "0123456789.,-+";
zen = "0123456789.,-+";
str = "";
for (i=0; i<input.length; i++) {
c = input.charAt(i);
n = zen.indexOf(c,0);
if (n >= 0) c = han.charAt(n);
str += c;
}
return str;
}
/*
* 文字列strの最後からn番目の文字がcならr1を返し、そうでなければr2を返す。
*/
function select2(str, n, c, r1, r2) {
if (str.charAt(str.length - n) == c)
return r1;
else
return r2;
}
/*
* 前後の半角文字を消す。
*/
function delHankaku(str) {
var len = str.length;
for(var i = 0; i < len; i++) {
var c = str.charAt(i);
if (c < ' ' || '~' < c)
break;
}
var b = i;
for(; i < len; i++) {
c = str.charAt(i);
if (' ' <= c && c <= '~')
break;
}
return str.substring(b, i);
}
/*
* strのi番目(iが負のときは最後から-i番目)の文字がcならx、そうでなければyを返す。
*/
function charChoice(str, i, c, x, y) {
if (i < 0)
i = str.length + i;
if (str.charAt(i) == c)
return x;
else
return y;
}
/*
* 条件condが成立すればx、しなければyを返す。
*/
function condition(cond, x, y) {
return cond ? x : y;
}
/*
* 文字列から(先頭の)数値を抽出する。
* @param str 文字列
* @param defnum 数値以外の文字列の場合に返す数値
* @return 数値
*/
function defaultNum(str, defnum) {
if (str == "" || str == "-" || str == "-") return defnum;
var nums = pickupNumZ(str, true);
if (nums.length == 0) return defnum;
return nums[0];
}
|