由于客户要求,希望日期采用日本的旧历算法,并且要求验证。
我自己写了下面这个程序,我在代码方面还不成熟,有很多不足的地方,可能还存在Bug,希望有好的建议告诉我哦。
JapaneseCalendar.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" width="370" height="26" horizontalGap="4"
horizontalAlign="left" paddingLeft="2" paddingTop="2"
creationComplete="init();">
<mx:Script>
<![CDATA[
import mx.managers.IFocusManagerComponent;
import validate.ErrorValidate;
import mx.managers.PopUpManager;
import define.MsgCodeConst;
import define.DefineCodeConst;
import mx.collections.ArrayCollection;
[Bindable]
public var myTitle:String = "";
[Bindable]
public var myAC:ArrayCollection = new ArrayCollection([
"明治", "大正", "昭和", "平成"]);
private var errorArry:ArrayCollection = null;
private var year:int = 0;
private var month:int = 0;
private var date:int = 0;
private var gregorianYear:int = 0;
private var isLeapYear:Boolean = false;
public function getYearName():String
{
return gengo.selectedLabel;
}
public function getYear():String
{
return dob_Year.text;
}
public function getMonth():String
{
return dob_Month.text;
}
public function getDate():String
{
return dob_Date.text;
}
private function init():void
{
focusManager.setFocus(IFocusManagerComponent(gengo));
}
public function doValid():ArrayCollection
{
year = int(dob_Year.text);
month = int(dob_Month.text);
date = int(dob_Date.text);
errorArry = new ArrayCollection();
var nowDate:Date = new Date();
isLeapYear = isLeapYearCheck(gengo.text,year);
gengo.setStyle(DefineCodeConst.BORDER_COLOR,DefineCodeConst.BLACK_COLOR);
dob_Year.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.BLANK_COLOR);
dob_Month.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.BLANK_COLOR);
dob_Date.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.BLANK_COLOR);
if(gengo.selectedIndex < 0)
{
errorArry.addItem(myTitle + MsgCodeConst.ERR_TAG + MsgCodeConst.ERR_0002);
gengo.setStyle(DefineCodeConst.BORDER_COLOR,DefineCodeConst.PINK_COLOR);
}
if(dob_Year.text == "")
{
dob_Year.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.PINK_COLOR);
errorArry.addItem(yearLabel.text + MsgCodeConst.ERR_TAG + MsgCodeConst.ERR_0001);
}
else if(!ErrorValidate.isHalfNum(dob_Year.text))
{
dob_Year.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.PINK_COLOR);
errorArry.addItem(yearLabel.text + MsgCodeConst.ERR_TAG + MsgCodeConst.ERR_0006);
}
else if(year < 1)
{
errorArry.addItem(MsgCodeConst.ERR_0017);
dob_Year.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.PINK_COLOR);
}
if(dob_Month.text == "")
{
dob_Month.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.PINK_COLOR);
errorArry.addItem(monthLabel.text + MsgCodeConst.ERR_TAG + MsgCodeConst.ERR_0001);
}
else if(!ErrorValidate.isHalfNum(dob_Month.text))
{
dob_Month.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.PINK_COLOR);
errorArry.addItem(monthLabel.text + MsgCodeConst.ERR_TAG + MsgCodeConst.ERR_0006);
}
else if((month < 1) || (month > 12))
{
errorArry.addItem(MsgCodeConst.ERR_0018);
dob_Month.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.PINK_COLOR);
}
if(dob_Date.text == "")
{
dob_Date.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.PINK_COLOR);
errorArry.addItem(dateLabel.text + MsgCodeConst.ERR_TAG + MsgCodeConst.ERR_0001);
}
else if(!ErrorValidate.isHalfNum(dob_Date.text))
{
dob_Date.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.PINK_COLOR);
errorArry.addItem(dateLabel.text + MsgCodeConst.ERR_TAG + MsgCodeConst.ERR_0006);
}
else if((date < 1) || (date > 31))
{
errorArry.addItem(MsgCodeConst.ERR_0019);
dob_Date.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.PINK_COLOR);
}
/* 明治 1868年1月25日~1912年7月29日 1868 1912 45
大正 1912年7月30日~1926年12月24日 1912 1926 15
昭和 1926年12月25日~1989年1月7日 1926 1989 64
平成 1989年1月8日~ 1989 2008 20 */
doValidJapaneseCalendar("明治",45,1,25,7,29);
doValidJapaneseCalendar("大正",15,7,30,12,24);
doValidJapaneseCalendar("昭和",64,12,25,1,7);
doValidJapaneseCalendar("平成",(nowDate.fullYear-1989+1),1,8,nowDate.getMonth()+1,nowDate.getDate());
isMonthCheck(month);
isAgeCheck();
if(errorArry.length > 0)
{
return errorArry;
}
else
{
return new ArrayCollection();
}
}
/********************************************************<BR>
* メソッド名: doValidJapaneseCalendar <BR>
* <BR>
* 機能概要:指定された和暦が正しい日付かどうかをチェックする <BR>
* <BR>
* @return ない <BR>
* <BR>
* @作者 Tenghy <BR>
* <BR>
* @serialData 2008 08 22 <BR>
*********************************************************/
private function doValidJapaneseCalendar(YearName:String, maxYear:int, startMonth:int, startDate:int,
endMonth:int, endDate:int):void
{
if(gengo.text == YearName)
{
if(year > maxYear)
{
errorArry.addItem(MsgCodeConst.ERR_0024);
dob_Year.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.PINK_COLOR);
}
if((year == maxYear) && (month > endMonth))
{
errorArry.addItem(MsgCodeConst.ERR_0024);
dob_Month.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.PINK_COLOR);
}
if((year == maxYear) && (month == endMonth) && (date > endDate))
{
errorArry.addItem(MsgCodeConst.ERR_0024);
dob_Date.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.PINK_COLOR);
}
if((year == 1) && (month < startMonth))
{
errorArry.addItem(MsgCodeConst.ERR_0024);
dob_Month.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.PINK_COLOR);
}
if((year == 1) && (month == startMonth) && (date < startDate))
{
errorArry.addItem(MsgCodeConst.ERR_0024);
dob_Date.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.PINK_COLOR);
}
}
}
/********************************************************<BR>
* メソッド名: isMonthCheck <BR>
* <BR>
* 機能概要:毎月最大の日をチェックする <BR>
* <BR>
* @return ない <BR>
* <BR>
* @作者 Tenghy <BR>
*
* @serialData 2008 08 21 <BR>
*********************************************************/
private function isMonthCheck(moth:int):void
{
switch(month)
{
case 4:
case 6:
case 9:
case 11:
if(date > 30)
{
errorArry.addItem(MsgCodeConst.ERR_0021);
dob_Date.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.PINK_COLOR);
}
break;
case 2:
if(isLeapYear && (date > 29))
{
errorArry.addItem(MsgCodeConst.ERR_0022);
dob_Date.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.PINK_COLOR);
}
else if(!isLeapYear && (date > 28))
{
errorArry.addItem(MsgCodeConst.ERR_0023);
dob_Date.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.PINK_COLOR);
}
break;
}
}
/********************************************************<BR>
* メソッド名: isLeapYearCheck <BR>
* <BR>
* 機能概要:指定された西暦を表す年が閏年かをチェックする <BR>
* <BR>
* @return ない <BR>
* <BR>
* @作者 Tenghy <BR>
*
* @serialData 2008 08 21 <BR>
*********************************************************/
private function isLeapYearCheck(YearName:String,japaneseYear:int):Boolean
{
if(YearName == "明治")gregorianYear = japaneseYear + 1868 - 1;
if(YearName == "大正")gregorianYear = japaneseYear + 1912 - 1;
if(YearName == "昭和")gregorianYear = japaneseYear + 1926 - 1;
if(YearName == "平成")gregorianYear = japaneseYear + 1989 - 1;
if( ((gregorianYear % 4 == 0) && (gregorianYear % 100 != 0)) || (gregorianYear % 400 == 0 ) )
{
return true;
}
else
{
return false;
}
}
/********************************************************<BR>
* メソッド名: isAgeCheck <BR>
* <BR>
* 機能概要:満20歳以上をチェックする <BR>
* <BR>
* @return ない <BR>
* <BR>
* @作者 Tenghy <BR>
*
* @serialData 2008 08 21 <BR>
*********************************************************/
private function isAgeCheck():void
{
var nowDate:Date = new Date();
var inputDate:Date = new Date();
inputDate.setUTCFullYear(gregorianYear,month,date);
if(nowDate.getUTCFullYear() - inputDate.getUTCFullYear() < 20)
{
errorArry.addItem(MsgCodeConst.ERR_0020);
}
}
]]>
</mx:Script>
<mx:ComboBox height="22" id="gengo" width="126" dataProvider="{myAC}"/>
<mx:TextInput id="dob_Year" width="50" height="22" maxChars="2"/>
<mx:Label text="年" id="yearLabel"/>
<mx:TextInput id="dob_Month" height="22" width="30" maxChars="2"/>
<mx:Label text="月" id="monthLabel"/>
<mx:TextInput id="dob_Date" height="22" width="30" maxChars="2"/>
<mx:Label text="日" id="dateLabel"/>
</mx:HBox>
ErrorValidate.as文件,
package validate
{
import sice.validator.IValidateItem;
public class ErrorValidate
{
/********************************************************<BR>
* メソッド名: isLenNum <BR>
* 機能概要:i~jであるかどうかチェックする <BR>
* (integer,float,double) <BR>
* <BR>
* @param 引数:value 入力文字列 <BR>
* <BR>
* @return 戻り値 True: はい False: いいえ <BR>
* <BR>
* @serialData 2008 08 15 <BR>
* @author TengHY <BR>
*********************************************************/
public static function isLenNum(str:String,i:int,j:int):Boolean{
if(str.length<=j && str.length >=i ){
return true;
}else{
return false;
}
}
/********************************************************<BR>
* メソッド名: isLargeEng <BR>
* 機能概要:英大文字であるかどうかチェックする <BR>
* (integer,float,double) <BR>
* <BR>
* @param 引数:value 入力文字列 <BR>
* <BR>
* @return 戻り値 True: はい False: いいえ <BR>
* <BR>
* @serialData 2008 08 15 <BR>
*********************************************************/
public static function isLargeEng(str:String):Boolean {
var c:String;
var iLength:int = str.length;
var checkUpperEn:Boolean = false;
var ex2:String = "/[A-Z]";
var re2:RegExp = new RegExp(ex2, "j");
for (var i:int = 0; i < iLength; i++) {
c = str.charAt(i);
if(re2.test(c)) {
checkUpperEn = true;
break;
}
}
return checkUpperEn;
}
/********************************************************<BR>
* メソッド名: isHalfNumberCheck <BR>
* 機能概要:半角数字であるかどうかチェックする <BR>
* (integer,float,double) <BR>
* <BR>
* @param 引数:value 入力文字列 <BR>
* <BR>
* @return 戻り値 True: はい False: いいえ <BR>
* <BR>
* @serialData 2008 08 15 <BR>
*********************************************************/
public static function isHalfNum(str:String):Boolean
{
var c:int;
var retValue:Boolean = true;
for (var i:int = 0; i < str.length; i++){
c = str.charCodeAt(i);
if (!(c >= 0x30 && c <= 0x39)){
retValue = false;
break;
}
}
return retValue;
}
/********************************************************<BR>
* メソッド名: isFullKanaCheck <BR>
* 機能概要:全角カナであるかどうかチェックする <BR>
* <BR>
* @param 引数:value 入力文字列 <BR>
* <BR>
* @return 戻り値 True: はい False: いいえ <BR>
* <BR>
* @serialData 2008 08 15 <BR>
*********************************************************/
public static function isFullKana(str:String):Boolean
{
var c:int;
var retValue:Boolean = true;
for (var i:int = 0; i < str.length; i++)
{
var cc:String = str.charAt(i);
var accChar:String = " ,、,。,,,.,・,:,;,?,!,゛,゜,´,`,¨,^, ̄," +
"_,ヽ,ヾ,ゝ,ゞ,〃,仝,々,〆,〇,ー,―,‐,/,\,~,∥,|,…,‥,‘," +
"’,“,”,(,),〔,〕,[,],{,},〈,〉,《,》,「,」,『,』,【,】,+,-,±,×,÷," +
"=,≠,<,>,≦,≧,∞,∴,♂,♀,°,′,″,℃,¥,$,¢,£,%,#,&,*," +
"@,§,☆,★,○,●,◎,◇,◆,□,■,△,▲,▽,▼,※,〒,→,←,↑,↓,〓,∈,∋," +
"⊆,⊇,⊂,⊃,∪,∩,∧,∨,¬,⇒,⇔,∀,∃,∠,⊥,⌒,∂,∇,≡,≒,≪,≫," +
"√,∽,∝,∵,∫,∬,Å,‰,#,♭,♪,†,‡,¶,◯,";
if ((accChar.indexOf(cc)) == -1){
c = str.charCodeAt(i);
if (!((c > 0x30a0) && (c < 0x30ff)) && !((c > 0xff09) && (c < 0xff5b)))
{
retValue = false;
break;
}
}
}
return retValue;
}
/********************************************************<BR>
* メソッド名: isKana <BR>
* 機能概要:全角カナであるかどうかチェックする <BR>
* <BR>
* @param 引数:value 入力文字列 <BR>
* <BR>
* @return 戻り値 True: はい False: いいえ <BR>
* <BR>
* @serialData 2008 08 15 <BR>
*********************************************************/
public static function isKana(str:String):Boolean
{
var c:int;
var retValue:Boolean = true;
for (var i:int = 0; i < str.length; i++)
{
var cc:String = str.charAt(i);
c = str.charCodeAt(i);
if (!((c > 0x30a0) && (c < 0x30ff)) && !((c > 0xff09) && (c < 0xff5b)))
{
retValue = false;
break;
}
}
return retValue;
}
/********************************************************<BR>
* メソッド名: isZenkakuCheck <BR>
* 機能概要:全角であるかどうかチェックする <BR>
* <BR>
* @param 引数:value 入力文字列 <BR>
* <BR>
* @return 戻り値 True: はい False: いいえ <BR>
* <BR>
* @serialData 2008 08 15 <BR>
*********************************************************/
public static function isZenKaku(str:String):Boolean
{
var c:Number;
var Length:int = 0;
if(str == null || str.length == 0)
{
return true;
}
var lineStrs:Array = str.split("/r");
var lineLength:Number = lineStrs.length;
if(lineLength != 0)
{
for(var i:int = 0; i < lineLength; i++)
{
var strLine:String = lineStrs[i];
if(strLine == null || strLine == "")
{
//continue;
}
else
{
for (var j:int = 0; j < strLine.length; j++)
{
c = strLine.charCodeAt(j);
if (!charZenkaku(c))
return false;
}
}
}
}
else
{
if(str == null || str == "")
{
//continue;
} else {
for (var n:int = 0; n < str.length; n++)
{
c = str.charCodeAt(n);
if (!charZenkaku(c))
return false;
}
}
}
return true;
}
/********************************************************<BR>
* メソッド名: isHalfEng <BR>
* 機能概要:半角英文字であるかどうかチェックする <BR>
* <BR>
* @param 引数:value 入力文字列 <BR>
* <BR>
* @return 戻り値 True: はい False: いいえ <BR>
* <BR>
* @serialData 2008 08 15 <BR>
*********************************************************/
public static function isHalfEng(str:String):Boolean
{
var c:int;
for (var i:int = 0; i < str.length; i++)
{
c = str.charCodeAt(i);
if (!charHalfEng(c))
return false;
}
return true;
}
/********************************************************<BR>
* メソッド名: isHalfLowerEngNum <BR>
* 機能概要:半角英数文字であるかどうかチェックする <BR>
* <BR>
* @param 引数:value 入力文字列 <BR>
* <BR>
* @return 戻り値 True: はい False: いいえ <BR>
* <BR>
* @serialData 2008 08 15 <BR>
*********************************************************/
public static function isHalfLowerEngNum(str:String):Boolean
{
var c:int;
for (var i:int = 0; i < str.length; i++)
{
c = str.charCodeAt(i);
if (!charHalfNum(c) && !charHalfLowerEng(c))
return false;
}
return true;
}
public static function isHalfLowerEngNumAndSingle(str:String):Boolean
{
var c:int;
for (var i:int = 0; i < str.length; i++)
{
c = str.charCodeAt(i);
if (!charHalfNum(c) && !charHalfLowerEng(c)
&& (c != 0x2e)
&& (c != 0x2d)
&& (c != 0x5f))
return false;
}
return true;
}
/********************************************************<BR>
* メソッド名: isHalfEngNum <BR>
* 機能概要:半角英数文字であるかどうかチェックする <BR>
* <BR>
* @param 引数:value 入力文字列 <BR>
* <BR>
* @return 戻り値 True: はい False: いいえ <BR>
* <BR>
* @serialData 2008 08 15 <BR>
*********************************************************/
public static function isHalfEngNum(str:String):Boolean
{
var c:int;
for (var i:int = 0; i < str.length; i++)
{
c = str.charCodeAt(i);
if (!charHalfNum(c) && !charHalfEng(c))
return false;
}
return true;
}
/********************************************************<BR>
* メソッド名: isMaxLength <BR>
* 機能概要:max長チェックする <BR>
* <BR>
* @param 引数:value 入力文字列 <BR>
* <BR>
* @return 戻り値 True: はい False: いいえ <BR>
* <BR>
* @serialData 2008 08 15 <BR>
*********************************************************/
public static function isMaxLength(str:String,maxLength:int):Boolean
{
var c:Number;
var Length:int = 0;
for (var i:int = 0; i < str.length; i++){
c = str.charCodeAt(i);
if ((c < 128) || ((c > 160) && (c < 224))
|| ((c > 65376) && (c < 65440))){
Length++;
}
else{
Length += 2;
}
}
if (Length > maxLength || Length <= 0 ){
return false;
}
return true;
}
private static function charZenkaku(c:Number):Boolean
{
return !((c < 128) || (c > 65376 && c < 65440));
}
private static function charHalfEng(c:Number):Boolean
{
return charHalfLowerEng(c) || charHalfUpperEng(c);
}
private static function charHalfLowerEng(c:Number):Boolean
{
return (c >= 0x61 && c <= 0x7a);
}
private static function charHalfUpperEng(c:Number):Boolean
{
return (c >= 0x41 && c <= 0x5a);
}
private static function charHalfNum(c:Number):Boolean
{
return (c >= 0x30 && c <= 0x39);
}
}
}
MsgCodeConst.as
package define
{
public class MsgCodeConst
{
public static const ERR_0001:String = "入力必須項目です";
public static const ERR_0002:String = "選択必須項目です";
public static const ERR_0003:String = "半角の文字は使用できません";
public static const ERR_0004:String = "カタカナ以外の文字は使用できません";
public static const ERR_0005:String = "使用できない文字が入力されています";
public static const ERR_0006:String = "数字以外の文字は使用できません";
}
DefineCodeConst.as
package define
{
public class DefineCodeConst
{
public static const PINK_COLOR:String = "#ffe7de";
public static const BLACK_COLOR:String = "#eeeeee";
public static const BLANK_COLOR:String = "#FFFFFF";
public static const AUTOMATIC_INPUT_COLOR:String = "#EEEEEE";
public static const BACKGROUND_COLOR:String = "backgroundColor";
public static const BORDER_COLOR:String = "borderColor";
public static const AUTOMATIC_INPUT:String = "自動入力されます";
}
}
我自己写了下面这个程序,我在代码方面还不成熟,有很多不足的地方,可能还存在Bug,希望有好的建议告诉我哦。
JapaneseCalendar.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" width="370" height="26" horizontalGap="4"
horizontalAlign="left" paddingLeft="2" paddingTop="2"
creationComplete="init();">
<mx:Script>
<![CDATA[
import mx.managers.IFocusManagerComponent;
import validate.ErrorValidate;
import mx.managers.PopUpManager;
import define.MsgCodeConst;
import define.DefineCodeConst;
import mx.collections.ArrayCollection;
[Bindable]
public var myTitle:String = "";
[Bindable]
public var myAC:ArrayCollection = new ArrayCollection([
"明治", "大正", "昭和", "平成"]);
private var errorArry:ArrayCollection = null;
private var year:int = 0;
private var month:int = 0;
private var date:int = 0;
private var gregorianYear:int = 0;
private var isLeapYear:Boolean = false;
public function getYearName():String
{
return gengo.selectedLabel;
}
public function getYear():String
{
return dob_Year.text;
}
public function getMonth():String
{
return dob_Month.text;
}
public function getDate():String
{
return dob_Date.text;
}
private function init():void
{
focusManager.setFocus(IFocusManagerComponent(gengo));
}
public function doValid():ArrayCollection
{
year = int(dob_Year.text);
month = int(dob_Month.text);
date = int(dob_Date.text);
errorArry = new ArrayCollection();
var nowDate:Date = new Date();
isLeapYear = isLeapYearCheck(gengo.text,year);
gengo.setStyle(DefineCodeConst.BORDER_COLOR,DefineCodeConst.BLACK_COLOR);
dob_Year.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.BLANK_COLOR);
dob_Month.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.BLANK_COLOR);
dob_Date.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.BLANK_COLOR);
if(gengo.selectedIndex < 0)
{
errorArry.addItem(myTitle + MsgCodeConst.ERR_TAG + MsgCodeConst.ERR_0002);
gengo.setStyle(DefineCodeConst.BORDER_COLOR,DefineCodeConst.PINK_COLOR);
}
if(dob_Year.text == "")
{
dob_Year.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.PINK_COLOR);
errorArry.addItem(yearLabel.text + MsgCodeConst.ERR_TAG + MsgCodeConst.ERR_0001);
}
else if(!ErrorValidate.isHalfNum(dob_Year.text))
{
dob_Year.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.PINK_COLOR);
errorArry.addItem(yearLabel.text + MsgCodeConst.ERR_TAG + MsgCodeConst.ERR_0006);
}
else if(year < 1)
{
errorArry.addItem(MsgCodeConst.ERR_0017);
dob_Year.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.PINK_COLOR);
}
if(dob_Month.text == "")
{
dob_Month.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.PINK_COLOR);
errorArry.addItem(monthLabel.text + MsgCodeConst.ERR_TAG + MsgCodeConst.ERR_0001);
}
else if(!ErrorValidate.isHalfNum(dob_Month.text))
{
dob_Month.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.PINK_COLOR);
errorArry.addItem(monthLabel.text + MsgCodeConst.ERR_TAG + MsgCodeConst.ERR_0006);
}
else if((month < 1) || (month > 12))
{
errorArry.addItem(MsgCodeConst.ERR_0018);
dob_Month.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.PINK_COLOR);
}
if(dob_Date.text == "")
{
dob_Date.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.PINK_COLOR);
errorArry.addItem(dateLabel.text + MsgCodeConst.ERR_TAG + MsgCodeConst.ERR_0001);
}
else if(!ErrorValidate.isHalfNum(dob_Date.text))
{
dob_Date.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.PINK_COLOR);
errorArry.addItem(dateLabel.text + MsgCodeConst.ERR_TAG + MsgCodeConst.ERR_0006);
}
else if((date < 1) || (date > 31))
{
errorArry.addItem(MsgCodeConst.ERR_0019);
dob_Date.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.PINK_COLOR);
}
/* 明治 1868年1月25日~1912年7月29日 1868 1912 45
大正 1912年7月30日~1926年12月24日 1912 1926 15
昭和 1926年12月25日~1989年1月7日 1926 1989 64
平成 1989年1月8日~ 1989 2008 20 */
doValidJapaneseCalendar("明治",45,1,25,7,29);
doValidJapaneseCalendar("大正",15,7,30,12,24);
doValidJapaneseCalendar("昭和",64,12,25,1,7);
doValidJapaneseCalendar("平成",(nowDate.fullYear-1989+1),1,8,nowDate.getMonth()+1,nowDate.getDate());
isMonthCheck(month);
isAgeCheck();
if(errorArry.length > 0)
{
return errorArry;
}
else
{
return new ArrayCollection();
}
}
/********************************************************<BR>
* メソッド名: doValidJapaneseCalendar <BR>
* <BR>
* 機能概要:指定された和暦が正しい日付かどうかをチェックする <BR>
* <BR>
* @return ない <BR>
* <BR>
* @作者 Tenghy <BR>
* <BR>
* @serialData 2008 08 22 <BR>
*********************************************************/
private function doValidJapaneseCalendar(YearName:String, maxYear:int, startMonth:int, startDate:int,
endMonth:int, endDate:int):void
{
if(gengo.text == YearName)
{
if(year > maxYear)
{
errorArry.addItem(MsgCodeConst.ERR_0024);
dob_Year.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.PINK_COLOR);
}
if((year == maxYear) && (month > endMonth))
{
errorArry.addItem(MsgCodeConst.ERR_0024);
dob_Month.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.PINK_COLOR);
}
if((year == maxYear) && (month == endMonth) && (date > endDate))
{
errorArry.addItem(MsgCodeConst.ERR_0024);
dob_Date.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.PINK_COLOR);
}
if((year == 1) && (month < startMonth))
{
errorArry.addItem(MsgCodeConst.ERR_0024);
dob_Month.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.PINK_COLOR);
}
if((year == 1) && (month == startMonth) && (date < startDate))
{
errorArry.addItem(MsgCodeConst.ERR_0024);
dob_Date.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.PINK_COLOR);
}
}
}
/********************************************************<BR>
* メソッド名: isMonthCheck <BR>
* <BR>
* 機能概要:毎月最大の日をチェックする <BR>
* <BR>
* @return ない <BR>
* <BR>
* @作者 Tenghy <BR>
*
* @serialData 2008 08 21 <BR>
*********************************************************/
private function isMonthCheck(moth:int):void
{
switch(month)
{
case 4:
case 6:
case 9:
case 11:
if(date > 30)
{
errorArry.addItem(MsgCodeConst.ERR_0021);
dob_Date.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.PINK_COLOR);
}
break;
case 2:
if(isLeapYear && (date > 29))
{
errorArry.addItem(MsgCodeConst.ERR_0022);
dob_Date.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.PINK_COLOR);
}
else if(!isLeapYear && (date > 28))
{
errorArry.addItem(MsgCodeConst.ERR_0023);
dob_Date.setStyle(DefineCodeConst.BACKGROUND_COLOR,DefineCodeConst.PINK_COLOR);
}
break;
}
}
/********************************************************<BR>
* メソッド名: isLeapYearCheck <BR>
* <BR>
* 機能概要:指定された西暦を表す年が閏年かをチェックする <BR>
* <BR>
* @return ない <BR>
* <BR>
* @作者 Tenghy <BR>
*
* @serialData 2008 08 21 <BR>
*********************************************************/
private function isLeapYearCheck(YearName:String,japaneseYear:int):Boolean
{
if(YearName == "明治")gregorianYear = japaneseYear + 1868 - 1;
if(YearName == "大正")gregorianYear = japaneseYear + 1912 - 1;
if(YearName == "昭和")gregorianYear = japaneseYear + 1926 - 1;
if(YearName == "平成")gregorianYear = japaneseYear + 1989 - 1;
if( ((gregorianYear % 4 == 0) && (gregorianYear % 100 != 0)) || (gregorianYear % 400 == 0 ) )
{
return true;
}
else
{
return false;
}
}
/********************************************************<BR>
* メソッド名: isAgeCheck <BR>
* <BR>
* 機能概要:満20歳以上をチェックする <BR>
* <BR>
* @return ない <BR>
* <BR>
* @作者 Tenghy <BR>
*
* @serialData 2008 08 21 <BR>
*********************************************************/
private function isAgeCheck():void
{
var nowDate:Date = new Date();
var inputDate:Date = new Date();
inputDate.setUTCFullYear(gregorianYear,month,date);
if(nowDate.getUTCFullYear() - inputDate.getUTCFullYear() < 20)
{
errorArry.addItem(MsgCodeConst.ERR_0020);
}
}
]]>
</mx:Script>
<mx:ComboBox height="22" id="gengo" width="126" dataProvider="{myAC}"/>
<mx:TextInput id="dob_Year" width="50" height="22" maxChars="2"/>
<mx:Label text="年" id="yearLabel"/>
<mx:TextInput id="dob_Month" height="22" width="30" maxChars="2"/>
<mx:Label text="月" id="monthLabel"/>
<mx:TextInput id="dob_Date" height="22" width="30" maxChars="2"/>
<mx:Label text="日" id="dateLabel"/>
</mx:HBox>
ErrorValidate.as文件,
package validate
{
import sice.validator.IValidateItem;
public class ErrorValidate
{
/********************************************************<BR>
* メソッド名: isLenNum <BR>
* 機能概要:i~jであるかどうかチェックする <BR>
* (integer,float,double) <BR>
* <BR>
* @param 引数:value 入力文字列 <BR>
* <BR>
* @return 戻り値 True: はい False: いいえ <BR>
* <BR>
* @serialData 2008 08 15 <BR>
* @author TengHY <BR>
*********************************************************/
public static function isLenNum(str:String,i:int,j:int):Boolean{
if(str.length<=j && str.length >=i ){
return true;
}else{
return false;
}
}
/********************************************************<BR>
* メソッド名: isLargeEng <BR>
* 機能概要:英大文字であるかどうかチェックする <BR>
* (integer,float,double) <BR>
* <BR>
* @param 引数:value 入力文字列 <BR>
* <BR>
* @return 戻り値 True: はい False: いいえ <BR>
* <BR>
* @serialData 2008 08 15 <BR>
*********************************************************/
public static function isLargeEng(str:String):Boolean {
var c:String;
var iLength:int = str.length;
var checkUpperEn:Boolean = false;
var ex2:String = "/[A-Z]";
var re2:RegExp = new RegExp(ex2, "j");
for (var i:int = 0; i < iLength; i++) {
c = str.charAt(i);
if(re2.test(c)) {
checkUpperEn = true;
break;
}
}
return checkUpperEn;
}
/********************************************************<BR>
* メソッド名: isHalfNumberCheck <BR>
* 機能概要:半角数字であるかどうかチェックする <BR>
* (integer,float,double) <BR>
* <BR>
* @param 引数:value 入力文字列 <BR>
* <BR>
* @return 戻り値 True: はい False: いいえ <BR>
* <BR>
* @serialData 2008 08 15 <BR>
*********************************************************/
public static function isHalfNum(str:String):Boolean
{
var c:int;
var retValue:Boolean = true;
for (var i:int = 0; i < str.length; i++){
c = str.charCodeAt(i);
if (!(c >= 0x30 && c <= 0x39)){
retValue = false;
break;
}
}
return retValue;
}
/********************************************************<BR>
* メソッド名: isFullKanaCheck <BR>
* 機能概要:全角カナであるかどうかチェックする <BR>
* <BR>
* @param 引数:value 入力文字列 <BR>
* <BR>
* @return 戻り値 True: はい False: いいえ <BR>
* <BR>
* @serialData 2008 08 15 <BR>
*********************************************************/
public static function isFullKana(str:String):Boolean
{
var c:int;
var retValue:Boolean = true;
for (var i:int = 0; i < str.length; i++)
{
var cc:String = str.charAt(i);
var accChar:String = " ,、,。,,,.,・,:,;,?,!,゛,゜,´,`,¨,^, ̄," +
"_,ヽ,ヾ,ゝ,ゞ,〃,仝,々,〆,〇,ー,―,‐,/,\,~,∥,|,…,‥,‘," +
"’,“,”,(,),〔,〕,[,],{,},〈,〉,《,》,「,」,『,』,【,】,+,-,±,×,÷," +
"=,≠,<,>,≦,≧,∞,∴,♂,♀,°,′,″,℃,¥,$,¢,£,%,#,&,*," +
"@,§,☆,★,○,●,◎,◇,◆,□,■,△,▲,▽,▼,※,〒,→,←,↑,↓,〓,∈,∋," +
"⊆,⊇,⊂,⊃,∪,∩,∧,∨,¬,⇒,⇔,∀,∃,∠,⊥,⌒,∂,∇,≡,≒,≪,≫," +
"√,∽,∝,∵,∫,∬,Å,‰,#,♭,♪,†,‡,¶,◯,";
if ((accChar.indexOf(cc)) == -1){
c = str.charCodeAt(i);
if (!((c > 0x30a0) && (c < 0x30ff)) && !((c > 0xff09) && (c < 0xff5b)))
{
retValue = false;
break;
}
}
}
return retValue;
}
/********************************************************<BR>
* メソッド名: isKana <BR>
* 機能概要:全角カナであるかどうかチェックする <BR>
* <BR>
* @param 引数:value 入力文字列 <BR>
* <BR>
* @return 戻り値 True: はい False: いいえ <BR>
* <BR>
* @serialData 2008 08 15 <BR>
*********************************************************/
public static function isKana(str:String):Boolean
{
var c:int;
var retValue:Boolean = true;
for (var i:int = 0; i < str.length; i++)
{
var cc:String = str.charAt(i);
c = str.charCodeAt(i);
if (!((c > 0x30a0) && (c < 0x30ff)) && !((c > 0xff09) && (c < 0xff5b)))
{
retValue = false;
break;
}
}
return retValue;
}
/********************************************************<BR>
* メソッド名: isZenkakuCheck <BR>
* 機能概要:全角であるかどうかチェックする <BR>
* <BR>
* @param 引数:value 入力文字列 <BR>
* <BR>
* @return 戻り値 True: はい False: いいえ <BR>
* <BR>
* @serialData 2008 08 15 <BR>
*********************************************************/
public static function isZenKaku(str:String):Boolean
{
var c:Number;
var Length:int = 0;
if(str == null || str.length == 0)
{
return true;
}
var lineStrs:Array = str.split("/r");
var lineLength:Number = lineStrs.length;
if(lineLength != 0)
{
for(var i:int = 0; i < lineLength; i++)
{
var strLine:String = lineStrs[i];
if(strLine == null || strLine == "")
{
//continue;
}
else
{
for (var j:int = 0; j < strLine.length; j++)
{
c = strLine.charCodeAt(j);
if (!charZenkaku(c))
return false;
}
}
}
}
else
{
if(str == null || str == "")
{
//continue;
} else {
for (var n:int = 0; n < str.length; n++)
{
c = str.charCodeAt(n);
if (!charZenkaku(c))
return false;
}
}
}
return true;
}
/********************************************************<BR>
* メソッド名: isHalfEng <BR>
* 機能概要:半角英文字であるかどうかチェックする <BR>
* <BR>
* @param 引数:value 入力文字列 <BR>
* <BR>
* @return 戻り値 True: はい False: いいえ <BR>
* <BR>
* @serialData 2008 08 15 <BR>
*********************************************************/
public static function isHalfEng(str:String):Boolean
{
var c:int;
for (var i:int = 0; i < str.length; i++)
{
c = str.charCodeAt(i);
if (!charHalfEng(c))
return false;
}
return true;
}
/********************************************************<BR>
* メソッド名: isHalfLowerEngNum <BR>
* 機能概要:半角英数文字であるかどうかチェックする <BR>
* <BR>
* @param 引数:value 入力文字列 <BR>
* <BR>
* @return 戻り値 True: はい False: いいえ <BR>
* <BR>
* @serialData 2008 08 15 <BR>
*********************************************************/
public static function isHalfLowerEngNum(str:String):Boolean
{
var c:int;
for (var i:int = 0; i < str.length; i++)
{
c = str.charCodeAt(i);
if (!charHalfNum(c) && !charHalfLowerEng(c))
return false;
}
return true;
}
public static function isHalfLowerEngNumAndSingle(str:String):Boolean
{
var c:int;
for (var i:int = 0; i < str.length; i++)
{
c = str.charCodeAt(i);
if (!charHalfNum(c) && !charHalfLowerEng(c)
&& (c != 0x2e)
&& (c != 0x2d)
&& (c != 0x5f))
return false;
}
return true;
}
/********************************************************<BR>
* メソッド名: isHalfEngNum <BR>
* 機能概要:半角英数文字であるかどうかチェックする <BR>
* <BR>
* @param 引数:value 入力文字列 <BR>
* <BR>
* @return 戻り値 True: はい False: いいえ <BR>
* <BR>
* @serialData 2008 08 15 <BR>
*********************************************************/
public static function isHalfEngNum(str:String):Boolean
{
var c:int;
for (var i:int = 0; i < str.length; i++)
{
c = str.charCodeAt(i);
if (!charHalfNum(c) && !charHalfEng(c))
return false;
}
return true;
}
/********************************************************<BR>
* メソッド名: isMaxLength <BR>
* 機能概要:max長チェックする <BR>
* <BR>
* @param 引数:value 入力文字列 <BR>
* <BR>
* @return 戻り値 True: はい False: いいえ <BR>
* <BR>
* @serialData 2008 08 15 <BR>
*********************************************************/
public static function isMaxLength(str:String,maxLength:int):Boolean
{
var c:Number;
var Length:int = 0;
for (var i:int = 0; i < str.length; i++){
c = str.charCodeAt(i);
if ((c < 128) || ((c > 160) && (c < 224))
|| ((c > 65376) && (c < 65440))){
Length++;
}
else{
Length += 2;
}
}
if (Length > maxLength || Length <= 0 ){
return false;
}
return true;
}
private static function charZenkaku(c:Number):Boolean
{
return !((c < 128) || (c > 65376 && c < 65440));
}
private static function charHalfEng(c:Number):Boolean
{
return charHalfLowerEng(c) || charHalfUpperEng(c);
}
private static function charHalfLowerEng(c:Number):Boolean
{
return (c >= 0x61 && c <= 0x7a);
}
private static function charHalfUpperEng(c:Number):Boolean
{
return (c >= 0x41 && c <= 0x5a);
}
private static function charHalfNum(c:Number):Boolean
{
return (c >= 0x30 && c <= 0x39);
}
}
}
MsgCodeConst.as
package define
{
public class MsgCodeConst
{
public static const ERR_0001:String = "入力必須項目です";
public static const ERR_0002:String = "選択必須項目です";
public static const ERR_0003:String = "半角の文字は使用できません";
public static const ERR_0004:String = "カタカナ以外の文字は使用できません";
public static const ERR_0005:String = "使用できない文字が入力されています";
public static const ERR_0006:String = "数字以外の文字は使用できません";
}
DefineCodeConst.as
package define
{
public class DefineCodeConst
{
public static const PINK_COLOR:String = "#ffe7de";
public static const BLACK_COLOR:String = "#eeeeee";
public static const BLANK_COLOR:String = "#FFFFFF";
public static const AUTOMATIC_INPUT_COLOR:String = "#EEEEEE";
public static const BACKGROUND_COLOR:String = "backgroundColor";
public static const BORDER_COLOR:String = "borderColor";
public static const AUTOMATIC_INPUT:String = "自動入力されます";
}
}