カテゴリー ‘ JavaScript ’
JavaScript – 書式をチェックするには
第4弾は、書式チェックです。
日付チェック
[js]
/**
* 指定された文字列が有効な日付かチェックします。
* ※閏年判定含む。
*
* @param argValue チェック対象日付(8桁の半角数字(yyyymmdd)の書式)
* @return 日付として有効な場合はtrue、
* 日付として無効な場合はfalse
*/
function isDate(argValue)
{
if (isEmpty(argValue))
{
// 未入力の場合
return false;
}
if (argValue.length != 8 )
{
// 8桁以外の場合
return false;
}
if (!isNumeric(argValue))
{
// 半角数字以外の文字列が含まれている場合
return false;
}
var iYear = parseInt(argValue.substr(0, 4));
var iMonth = parseInt(argValue.substr(4, 2));
var iDay = parseInt(argValue.substr(6, 2));
var iMaxDayOfMonth = Array(31, 29, 31, 30, 31, 30,
31, 31, 30, 31, 30, 31);
if (iMonth < 1 || iMonth > 12)
{
return false;
}
if (iDay < 1 || iDay > iMaxDayOfMonth[iMonth – 1])
{
return false;
}
if (iMonth != 2)
{
return true;
}
if (iDay > 29)
{
return true;
}
if ((iYear % 4) == 0 && (iYear % 100) != 0)
{
return true;
}
if ((iYear % 400) == 0)
{
return true;
}
return false;
}
[/js]
メールアドレスチェック
[js]
/**
* 指定された文字列がメールアドレスとして有効かどうかチェックします。
* ※xxxxx@xxxxx.xxxの形式と一致するかどうかで判断します。
*
* @param argValue チェック対象文字列
* @return メールアドレスとして有効な場合はtrue、
* メールアドレスとして無効な場合はfalse
*/
function isMailAddress(argValue)
{
if (isEmpty(argValue))
{
// 未入力の場合
return false;
}
if (argValue.match(/^[a-zA-Z0-9_\-\.]+@[a-zA-Z0-9_\-]+(\.[a-zA-Z0-9_\-]+)+$/))
{
return true;
}
else
{
return false;
}
}
[/js]
電話番号チェック
[js]
/**
* 指定された文字列が電話番号として有効かどうかチェックします。
* ※9999-9999-9999の形式と一致するかどうかで判断します。
*
* @param argValue チェック対象文字列
* @return 電話番号として有効な場合はtrue、
* 電話番号として無効な場合はfalse
*/
function isTelNumber(argValue)
{
if (isEmpty(argValue))
{
// 未入力の場合
return false;
}
if (argValue.match(/^[0-9]+\-[0-9]+\-[0-9]+$/))
{
return true;
}
else
{
return false;
}
}
[/js]
郵便番号チェック
[js]
/**
* 指定された文字列が郵便番号として有効かどうかチェックします。
* ※999-9999、999-99、999の形式と一致するかどうかで判断します。
*
* @param argValue チェック対象文字列
* @return 郵便番号として有効な場合はtrue、
* 郵便番号として無効な場合はfalse
*/
function isZipCode(argValue)
{
if (isEmpty(argValue))
{
// 未入力の場合
return false;
}
if (argValue.match(/^\d{3}$|^\d{3}-\d{2}$|^\d{3}-\d{4}$/))
{
return true;
}
else
{
return false;
}
}
[/js]
数値チェック(マイナス符号あり)
[js]
/**
* マイナス符号チェックを行います。
* ・パターンマッチ 0~9、"-"
* ・マイナス符号の数 0 or 1
*
* 例)
* -123 –> OK
* 123 –> OK
* – –> NG
* 123- –> NG
* –123 –> NG
*
* @param argValue チェック対象文字列
* @return チェックOKの場合はtrue、
* チェックNGの場合はfalse
*/
function isMinus(argValue)
{
if (argValue.match(/[^0-9|^\-]/g))
{
// パターンマッチ 0~9,"-"以外はNG
return false;
}
// "-"の入力個数を取得する
var count = 0;
for (var i = 0; i < argValue.length; i++)
{
if (argValue.charAt(i) == "-")
{
count++;
}
}
if (2 <= count)
{
// "-"が2つ以上入力されている場合はNG
return false;
}
if (count == 1 && argValue.charAt(0) != "-")
{
// "-"が入力されていて、かつ先頭に"-"がない場合はNG
return false;
}
if (count == 1 && argValue.length == 1)
{
// "-"が入力されていて、"-"のみの入力はNG
return false;
}
return true;
}
[/js]
数値チェック(小数点あり)
[js]
* 小数点チェックを行います。
* ・パターンマッチ 0~9、"."
* ・小数点の数 0 or 1
* ・整数部の桁数チェック
* ・小数部の桁数チェック
*
* 例)整数部 3, 小数部 2の場合
* 123 –> OK
* 123.45 –> OK
* 1.2 –> OK
* 1234.56 –> NG
* 123.456 –> NG
* . –> NG
* .123 –> NG
* 123. –> NG
*
* @param argValue チェック対象文字列
* @param argIntKetasu 整数部の入力可能桁数
* @param argDecimalKetasu 小数部の入力可能桁数
* @return チェックOKの場合はtrue、
* チェックNGの場合はfalse
*/
function isDecimal(argValue, argIntKetasu, argDecimalKetasu)
{
if (argValue.match(/[^0-9|^.]/g))
{
// パターンマッチ 0~9,"."以外はNG
return false;
}
// 小数点の数を取得する
var count = 0;
for (var i = 0; i < argValue.length; i++)
{
if (argValue.charAt(i) == ".")
{
count++;
}
}
if (2 <= count)
{
// "."が2つ以上入力されている場合はNG
return false;
}
if (argValue.charAt(0) == ".")
{
// 先頭に小数点が入力された場合はNG
return false;
}
// 小数点以下のチェック
if (count == 1)
{
// 小数点が入力された場合のみチェック
// 小数点以下の桁数チェック
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 = "";
if (count == 1)
{
// 小数点が入力された場合
intPart = argValue.substring(0, argValue.indexOf("."));
}
else
{
intPart = argValue;
}
if (argIntKetasu < intPart.length)
{
// 整数の桁数がオーバーしている場合はNG
return false;
}
return true;
}
[/js]
数値チェック(マイナス符号あり・小数点あり)
[js]
/**
* マイナス符号付小数点チェックを行います。
* ・パターンマッチ 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;
}
[/js]
プロフィール
近藤 崇史 【 Takafumi Kondo 】 |
出身地 | : | 愛媛県松山市 |
現住所 | : | 東京都板橋区 |
職業 | : | フリーランスなシステムエンジニア |
得意分野 | : | JavaでのWebシステム開発 |
2005年の春、とある事情により、フリーランスのシステムエンジニアとなりました。
オープンソースの使い方やドキュメントの翻訳etc.を思いつくままに書いてます。
でも、文章を書くことがそんなに得意な方ではありませんので、あまり丁寧な書き方でなかったり、途中で飽きて、放置してしまったり、サンプルソースを張り付けているだけのものが多いですが、ご参考になれば幸いです。
最近のコメント