/** * マイナス符号付小数点チェックを行います。 * ・パターンマッチ 0~9、"-"、"." * ・パターンマッチ "-","."のみはNG * ・マイナス符号の数 0 or 1 * ・小数点の数 0 or 1 * ・整数部の桁数チェック * ・小数部の桁数チェック * * 例)整数部 3, 小数部 2の場合 * -123 --> OK * 123 --> OK * 123.45 --> OK * -123.45 --> OK * 1.2 --> OK * - --> NG * 123- --> NG * --123 --> NG * 1234.56 --> NG * 123.456 --> NG * . --> NG * .123 --> NG * 123. --> NG * -. --> NG * * @param argValue チェック対象文字列 * @param argIntKetasu 整数部の入力可能桁数 * @param argDecimalKetasu 小数部の入力可能桁数 * @return チェックOKの場合はtrue、 * チェックNGの場合はfalse */ function isMinusDecimal(argValue, argIntKetasu, argDecimalKetasu) { var minusFlg = false; var decFlg = false; if (argValue.match(/[^0-9|^\-|^.]/g)) { // パターンマッチ 0~9,"-","."以外はNG return false; } if (argValue.match(/[^\-|^.]/g)) { } else { // パターンマッチ "-","."のみはNG return false; } // 小数点の数を取得する var count = 0; for (var i = 0; i < argValue.length; i++) { if (argValue.charAt(i) == ".") { decFlg = true; count++; } } if (2 <= count) { // "."が2つ以上入力されている場合はNG return false; } // "-"の入力個数を取得する count = 0; for (i = 0; i < argValue.length; i++) { if (argValue.charAt(i) == "-") { minusFlg = true; count++; } } if (2 <= count || (count == 1 && argValue.charAt(0) != "-")) { // "-"が2つ以上入力されている場合はNG // "-"が入力されていて、かつ先頭に"-"がない場合はNG return false; } // 小数点以下のチェック if (decFlg) { // 小数点以下の桁数チェック var idx = argValue.lastIndexOf("."); var decimalPart = argValue.substring(idx); // 小数点以下の桁数を取得する var length = decimalPart.length - 1; if (length == 0) { // 小数点以下の入力がない場合はNG return false; } if (argDecimalKetasu < length) { // 小数点以下の桁数がオーバーしている場合はNG return false; } } // 整数部の桁数チェック var intPart = ""; length = 0; if (decFlg) { // 小数点が入力された場合 intPart = argValue.substring(0, argValue.indexOf(".")); } else { intPart = argValue; } length = intPart.length; if (minusFlg) { // マイナスが入力された場合は-1 length--; } if (argIntKetasu < length) { // 整数の桁数がオーバーしている場合はNG return false; } return true; }
コメント (0件)