2025년 2월 5일 수요일

유튜브-변환

// 비주얼스튜디오 > 도구 > NuGet패키지관리자 > 솔류션용 NuGet패키지관리 > VideoLibrary 검색 설치 (프레임웍:4.7.2, VideoLibrary:3.1.9)

using System;
using System.IO;
using System.Threading;
using System.Windows.Forms;
using VideoLibrary;
using System.Net;

namespace WindowsFormsApp3
{
    public partial class Form1 : Form
    {
        char[] invalidChars = System.IO.Path.GetInvalidFileNameChars(); // 허용하지 않는 파일명을 찾기위해
        public Form1()
        {
            InitializeComponent();
            //cbbDownType.Items.Clear();
            //cbbDownType.DisplayMember = "Text";
            //cbbDownType.ValueMember = "Value";
            //cbbDownType.Items.Add(new { Text = "MP4 And MP3", Value = "0" });
            //cbbDownType.Items.Add(new { Text = "Only MP4", Value = "1" });
            //cbbDownType.Items.Add(new { Text = "Only MP3", Value = "2" });
            //cbbDownType.SelectedIndex = 0;
        }

        private void btnFolderSelect_Click(object sender, EventArgs e)
        {
            //folderDialog.ShowDialog();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string strUrl = "https://youtu.be/s3MiZJy4PLg?feature=shared";
            //string strType = (cbbDownType.SelectedItem as dynamic).Value;

            //if (string.IsNullOrEmpty(folderDialog.SelectedPath))
            //{
            //    folderDialog.ShowDialog();
            //}

            //if (string.IsNullOrEmpty(folderDialog.SelectedPath) == false)
            //{
            //    Thread trd = new Thread(() => YouTobeDown(strUrl, folderDialog.SelectedPath, strType));
            //    trd.Start();

            //}

            Thread trd = new Thread(() => YouTobeDown(strUrl, @"C:\Users\saengyeol_chun2\Desktop", ""));
            trd.Start();
        }

        private async void YouTobeDown(string strUrl, string strSavePath, string strType)
        {
            try
            {
                WebRequest GetTitle = HttpWebRequest.Create(strUrl);
                YouTube youtube = YouTube.Default;
                YouTubeVideo video = await youtube.GetVideoAsync(strUrl);
                string fileNm = "1111";
                File.WriteAllBytes(strSavePath + @"\" + fileNm + ".mp4", await video.GetBytesAsync());
            }
            catch (Exception ex)
            {
                //throw;
            }


            //if (strType == "0" || strType == "2")
            //{
            //}

        }

    }
}

변환

// 비주얼스튜디오 > 도구 > NuGet패키지관리자 > 솔류션용 NuGet패키지관리 > HtmlAgilityPack 검색해서 설치

using HtmlAgilityPack;
using System;
using System.Drawing;
using System.IO;
using System.Windows.Forms;

namespace WindowsFormsApp2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            imgBas64Test001();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            imgBas64Test002();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            string strUrl = "http://kiken.kolon.com/Upload_Approval10/LS/Doc/2025/323/00000000000031540323.mht";
            Uri url = new Uri(strUrl);
            System.Net.WebClient wClient = new System.Net.WebClient();
            string strMhtData = wClient.DownloadString(url);

            ClsResult cRslt = getBoundaryText(ref strMhtData);
            if (cRslt.bSucc)
            {
                ClsHtmlDoc htmlRslt = mhtToHtml(ref strMhtData, cRslt.sResult,true); // htmlDocument정보와 결과 정보를 가지고 있음
                if (htmlRslt.cRslt.bSucc)
                {
                    htmlRslt.htmlDoc.Save(@"C:\Users\saengyeol_chun2\Desktop\111.html");
                }
            }
            else
            {
                MessageBox.Show(cRslt.sResult);
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            string strFlNm = @"C:\Users\saengyeol_chun2\Desktop\새 폴더\00000000000021838552.mht";
            StreamReader RS = new StreamReader(strFlNm);
            string strMhtData = RS.ReadToEnd();
            RS.Close();

            ClsResult cRslt = getBoundaryText(ref strMhtData);
            if (cRslt.bSucc)
            {
                ClsHtmlDoc htmlRslt = mhtToHtml(ref strMhtData, cRslt.sResult, true);    // htmlDocument정보와 결과 정보를 가지고 있음
                if (htmlRslt.cRslt.bSucc)
                {
                    htmlRslt.htmlDoc.Save(@"C:\Users\saengyeol_chun2\Desktop\222.html");
                }
            }
            else
            {
                MessageBox.Show(cRslt.sResult);
            }
        }


        private ClsResult getBoundaryText(ref string strMht)
        {
            ClsResult cRslt = new ClsResult();

            int nStarPos = strMht.IndexOf("boundary=");
            if (nStarPos > 0)
            {
                int nEndPos = strMht.IndexOf("\"", nStarPos + 10);
                string strMsg = "--" + strMht.Substring(nStarPos + 10, nEndPos - nStarPos - 10);
                cRslt.setResult(true, strMsg, "");
            }
            else
            {
                cRslt.setResult(false, "기준점 boundary를 찾을수 없습니다.", "");
            }
            return cRslt;
        }

        private ClsHtmlDoc mhtToHtml(ref string strMht, string strBoundary, bool isUtf8)
        {
            string [] arrMht = strMht.Split(new string[] { strBoundary }, StringSplitOptions.None);
            string strErr = string.Empty;
            ClsHtmlDoc cHtmlRslt = new ClsHtmlDoc();

            HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
            if (arrMht.Length < 2)
            {
                
                cHtmlRslt.setHtmlDoc("본문의 boundary를 찾을수 없습니다.", "");
                return cHtmlRslt;
            }
            else
            {
                try
                {
                    //arrMht[1].Split(new string[] { Environment.NewLine + Environment.NewLine }, StringSplitOptions.None)[1].Trim();
                    string tmpItm = arrMht[1].Split(new string[] { "\n\n" }, StringSplitOptions.None)[1].Trim();
                    int nCnt = tmpItm.IndexOf("\n") + 1;
                    string strItm = tmpItm.Substring(nCnt).Trim();
                    byte[] arrHtml = Convert.FromBase64String(strItm);
                    string strHtml = string.Empty;
                    if (isUtf8)
                    {
                        strHtml = System.Text.Encoding.UTF8.GetString(arrHtml);
                    }
                    else
                    {
                        strHtml = System.Text.Encoding.GetEncoding("ks_c_5601-1987").GetString(arrHtml);
                    }
                    htmlDoc.LoadHtml(strHtml);
                }
                catch (Exception)
                {
                    cHtmlRslt.setHtmlDoc("본문 변환에 실패하였습니다.", "");
                    return cHtmlRslt;
                }
            }

            int nIdx = 1;
            HtmlNodeCollection hnc = htmlDoc.DocumentNode.SelectNodes("//img");
            ClsResult cRslt = new ClsResult(true);  // 이미지가 하나도 없는 경우가 있어 성공에서 시작
            foreach (HtmlNode hNode in hnc)
            {
                cRslt = GetImage(hNode, ref arrMht, nIdx);
                
                if (cRslt.bSucc)
                {
                    hNode.SetAttributeValue("src", cRslt.sResult);
                }
                else
                {
                    break;
                }
                nIdx++;
            }

            cHtmlRslt.setHtmlDoc(htmlDoc, cRslt);

            return cHtmlRslt;
        }


        private ClsResult GetHtml(string strMht, string strBoundary, bool isUtf8)
        {
            ClsResult cRslt = new ClsResult();
            try
            {
                string strItm = strMht.Split(new string[] { "\n\n" }, StringSplitOptions.None)[1].Trim();
                byte[] arrHtml = Convert.FromBase64String(strItm);
                string strHtml = string.Empty;
                if (isUtf8)
                {
                    strHtml = System.Text.Encoding.UTF8.GetString(arrHtml);
                }
                else
                {
                    strHtml = System.Text.Encoding.GetEncoding("ks_c_5601-1987").GetString(arrHtml);
                }
                cRslt.setResult(true, strHtml, "");
            }
            catch (Exception ex)
            {
                cRslt.setResult(false, ex.Message, "");
            }
            return cRslt;
        }


        private ClsResult GetImage(HtmlNode hNode, ref string[] arrMht, int nCnt)
        {
            ClsResult cRslt = new ClsResult();
            string strAttr = hNode.GetAttributeValue("src", "");
            if (string.IsNullOrWhiteSpace(strAttr))
            {
                cRslt.setResult(false, string.Format("{0}번째 src 속성 값이 없습니다.", nCnt), "");
            }
            else
            {
                try
                {
                    for (int idx = 2; idx < arrMht.Length; idx++)
                    {
                        if (arrMht[idx].IndexOf(strAttr) > -1)
                        {
                            string strItm = "data:image/png;charset=utf-8;base64," + arrMht[idx].Trim().Split(new string[] { "\n\n" }, StringSplitOptions.None)[1].Trim();
                            cRslt.setResult(true, strItm, "");
                        }
                    }
                }
                catch (Exception ex)
                {
                    cRslt.setResult(false, string.Format("{0}번째 이미지 찾는중 오류 발생 : {1}", nCnt, ex.Message), "");
                }
            }

            if (cRslt.sResult == string.Empty)
            {
                cRslt.setResult(false, string.Format("{0}번째 src 속성[{1}] 동일한 이미지 찾기에 실패하였습니다.", nCnt, strAttr), "");
            }

            return cRslt;
        }


        
        private void imgBas64Test001()
        {
            string flNm = @"C:\Users\saengyeol_chun2\Desktop\처리모음\캡처.PNG";
            string strHtml = @"
"; WebBrowser browser = new WebBrowser(); browser.ScriptErrorsSuppressed = true; browser.DocumentText = strHtml; browser.Document.Write(strHtml); System.Windows.Forms.HtmlDocument htmlDoc = browser.Document; HtmlElementCollection imgRows = htmlDoc.GetElementsByTagName("img"); foreach (HtmlElement imgElement in imgRows) { string tmpSrc = imgElement.GetAttribute("src"); if (string.IsNullOrWhiteSpace(tmpSrc) == false) { string strSrc = "data:image/png;charset=utf-8;base64," + GetStringFromImageFile(flNm); // 이미지를 Base64로 변환 imgElement.SetAttribute("src", strSrc); } } string outHtml = htmlDoc.Body.InnerHtml; } private void imgBas64Test002() { string flNm = @"C:\Users\saengyeol_chun2\Desktop\처리모음\캡처.PNG"; string strHtml = @"
"; HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument(); htmlDoc.LoadHtml(strHtml); HtmlNodeCollection imgRows = htmlDoc.DocumentNode.SelectNodes("//img"); foreach (HtmlNode imgElement in imgRows) { string tmpSrc = imgElement.GetAttributeValue("src", ""); if (string.IsNullOrWhiteSpace(tmpSrc) == false) { string strSrc = "data:image/png;charset=utf-8;base64," + GetStringFromImageFile(flNm); // 이미지를 Base64로 변환 imgElement.SetAttributeValue("src", strSrc); } } string outHtml = htmlDoc.DocumentNode.InnerHtml; } private string GetStringFromImageFile(string filename) { string base64Image = ""; Image img = System.Drawing.Image.FromFile(filename); MemoryStream mstream = new MemoryStream(); img.Save(mstream, img.RawFormat); byte[] imgBytes = mstream.ToArray(); base64Image = Convert.ToBase64String(imgBytes); return base64Image; } } public class ClsHtmlDoc { public HtmlAgilityPack.HtmlDocument htmlDoc; public ClsResult cRslt; /// /// 성공시 호출 /// /// public void setHtmlDoc(HtmlAgilityPack.HtmlDocument htmlDocument) { cRslt = new ClsResult(); htmlDoc = htmlDocument; cRslt.bSucc = true; } /// /// 실패시 호출 /// /// /// public void setHtmlDoc(ClsResult clsRslt) { cRslt = clsRslt; } /// /// 실패시 호출 (메세지와, 코드는 직접 입력) /// /// /// public void setHtmlDoc(string strResult, string strCode) { cRslt = new ClsResult(); cRslt.sResult = strResult; cRslt.sCode = strCode; } public void setHtmlDoc(HtmlAgilityPack.HtmlDocument htmlDocument, ClsResult clsRslt) { htmlDoc = htmlDocument; cRslt = new ClsResult(); } } public class ClsResult { public bool bSucc = false; public string sResult = string.Empty; public string sCode = string.Empty; //public string sEtc1 = string.Empty; //public string sEtc2 = string.Empty; public ClsResult() { } public ClsResult(bool isSucc) { bSucc = isSucc; } public void setResult(bool isSucc, string strMsg, string strCode) { bSucc = isSucc; sResult = strMsg; sCode = strCode; } /* public void setResult(bool isSucc, string strMsg, string strCode, string strEtc1) { bSucc = isSucc; sResult = strMsg; sCode = strCode; sEtc1 = strEtc1; } public void setResult(bool isSucc, string strMsg, string strCode, string strEtc1, string strEtc2) { bSucc = isSucc; sResult = strMsg; sCode = strCode; sEtc1 = strEtc1; sEtc2 = strEtc2; } */ } }

2017년 11월 8일 수요일

C# 비밀번호 정규식

string msg = ""; string _Pattern = @"(?=^.{9,15})(?=.*[a-zA-Z])(?=.*[!@#$%^&*+=->

2017년 2월 13일 월요일

기본적인 유효성 검사 및 태그 틀 layerMsg 및 focus

---------------- 코드 실행 시작---------------------------------------------------------------
1-1항목 1-2항목 숫자만
2-1항목 2-2항목 숫자+콤마
3-1항목 3-2항목 숫자+장선(-)
4-1항목 4-2항목 숫자+점(.)
에러메세지....
---------------- 코드 실행 종료---------------------------------------------------------------
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<style type="text/css">
 .layer-main {
 z-index:2000;
 display:none;
 position: fixed;
 left: 0;
 right: 0;
 top: 0;
 bottom: 0;
 text-align: center;
 background-color: rgba(0, 0, 0, 0.5);
}
.layer-main:before {
 content: "";
 display: inline-block;
 height: 100%;
 vertical-align: middle;
 margin-right: -.25em;
}
.layer-popup {
 display: inline-block;
 vertical-align: middle;
 background-color: #fff;
 border: 1px solid #3571B5;
 z-index: 10;
 font-family:Tahoma;
}
.layer-popup .layer-container {
 padding-bottom: 20px;
}

.layer-title {
 overflow:hidden;
 margin:0px;
 padding:0px;
 background-color: #474747;
 height:36px;
}
.layerTitle {
 float:left;
 line-height:36px;
 margin:0px;
 padding:0px 0px 0px 10px;
 font-size:15px;
 color:#ffffff;
}

.layer-close {
 float:right;
 margin:0px;
 padding:8px 10px;
 cursor:pointer;
}

.layerConts {
 clear:both;
 margin-top:10px;
 padding: 10px;
}
</style>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function (){
$("[d-valid='ValidNumber']").each(function (){
   // 익스 플로러 10버전 이상 및 (크롬 사파리 포함) 지원하면 keydown 이벤트를 input 이벤트로 데체 하면 좋음!!!!
$(this).on("keydown", function () {kdNumber(this);});
$(this).on("keyup", function () {kuNumber(this);});
});

$("[d-valid='ValidNumComma']").each(function (){
$(this).on("keydown", function () {kdNumComma(this);});
$(this).on("keyup", function () {kuNumComma(this);});
$(this).on("blur", function () {kbNumComma(this);});
});

$("[d-valid='ValidNumMinus']").each(function (){
$(this).on("keydown", function () {kdNumMinus(this);});
$(this).on("keyup", function () {kuNumMinus(this);});
});

$("[d-valid='ValidNumDot']").each(function (){
$(this).on("keydown", function () {kdNumDot(this);});
$(this).on("keyup", function () {kuNumDot(this);});
});
});

/* -- prototype -------------------------------------------------------------------------------------------------------------------*/
String.prototype.DelComma = function () {
return this.replace( /,/g, "");
}

String.prototype.AddComma = function () {
return this.replace(/[^0-9]/g , "").replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}


/* -- replace후 커서위치 유지 -------------------------------------------------------------------------------------------------------------------*/
function CurserSet(Obj, selLen) {
if (Obj.setSelectionRange) { Obj.focus(); Obj.setSelectionRange(selLen, selLen); } /* WebKit */
else if (Obj.createTextRange) { var range = Obj.createTextRange(); range.collapse(true); range.moveEnd('character', selLen); range.moveStart('character', selLen); range.select(); } /* IE */
else if (Obj.selectionStart) { Obj.selectionStart = selLen; Obj.selectionEnd = selLen; }
}

/* -- 숫자만 -------------------------------------------------------------------------------------------------------------------*/
function ValidNumber(Obj) {
var jObj = $(Obj);
var val = jObj.val();
var required = jObj.attr("d-required");
if(required.toLowerCase() != "true" && val == ""){
return true;
}

var msg = jObj.attr("d-msg");
if(jObj.attr("d-required") == "true" && val == "" ){
if(jObj.val() == ""){
msgShow(Obj, msg + " 항목 값을 입력해주세요.");
}
else{
msgShow(Obj, msg + " 항목 입력값을 확인하여 주세요.");
}
}
else{
var ext = /[^0-9]/g;
if(ext.test(val)){
msgShow(Obj, msg + " 항목 입력값을 확인하여 주세요.");
}
else{
return true;
}
}
jObj.focus();
return false;
}

function kuNumber(Obj) {
var selLen = Obj.selectionStart;
var oVal = $(Obj).val();
var tVal = oVal.replace(/[^0-9]/g , "");
if (oVal != tVal) {
$(Obj).val(tVal);
CurserSet(Obj, selLen + tVal.length - oVal.length);
}
}

function kdNumber(Obj) {
var eKey = event.keyCode;
if (((eKey >= 48 && eKey <= 57) || (eKey >= 96 && eKey <= 105) || eKey == 8 || eKey == 46 || eKey == 37 || eKey == 39 || eKey == 9) && (event.shiftKey == false)) {
}
else {
(event.preventDefault) ? event.preventDefault() : event.returnValue = false;
}
}

/* -- 숫자+콤마(,) -------------------------------------------------------------------------------------------------------------------*/
function ValidNumComma(Obj) {
var jObj = $(Obj);
var val = jObj.val();
var required = jObj.attr("d-required");
if(required.toLowerCase() != "true" && val == ""){
return true;
}

val = val.DelComma();
var msg = jObj.attr("d-msg");
if(jObj.attr("d-required") == "true" && val == "" ){
if(jObj.val() == ""){
msgShow(Obj, msg + " 항목 값을 입력해주세요.");
}
else{
msgShow(Obj, msg + " 항목 입력값을 확인하여 주세요.");
}
}
else{
var ext = /[^0-9]/g;
if(ext.test(val)){
msgShow(Obj, msg + " 항목 입력값을 확인하여 주세요.");
}
else{
return true;
}
}
jObj.focus();
return false;
}

function kuNumComma(Obj) {
var selLen = Obj.selectionStart;
var oVal = $(Obj).val();
var tVal = oVal.replace(/[^,0-9]/g , "");
if (oVal != tVal) {
$(Obj).val(tVal);
CurserSet(Obj, selLen + tVal.length - oVal.length);
}
}

function kdNumComma(Obj) {
var eKey = event.keyCode;
if (((eKey >= 48 && eKey <= 57) || (eKey >= 96 && eKey <= 105) || eKey == 8 || eKey == 188 || eKey == 46 || eKey == 37 || eKey == 39 || eKey == 9) && (event.shiftKey == false)) {
}
else {
(event.preventDefault) ? event.preventDefault() : event.returnValue = false;
}
}

function kbNumComma(Obj) {
var tval = $(Obj).val().AddComma();
$(Obj).val(tval);
}

function AddComma(Obj) {
$(Obj).val($(Obj).val().AddComma());
}

function DelComma(Obj) {
$(Obj).val($(Obj).val().DelComma());
}



/* -- 숫자+장선(-) -------------------------------------------------------------------------------------------------------------------*/
function ValidNumMinus(Obj) {
var jObj = $(Obj);
var val = jObj.val();
var required = jObj.attr("d-required");
if(required.toLowerCase() != "true" && val == ""){
return true;
}

val = val.replace( /-/g, "");
var msg = jObj.attr("d-msg");
if(jObj.attr("d-required") == "true" && val == "" ){
if(jObj.val() == ""){
msgShow(Obj, msg + " 항목 값을 입력해주세요.");
}
else{
msgShow(Obj, msg + " 항목 입력값을 확인하여 주세요.");
}
}
else{
var ext = /[^0-9]/g;
if(ext.test(val)){
msgShow(Obj, msg + " 항목 입력값을 확인하여 주세요.");
}
else{
return true;
}
}
jObj.focus();
return false;
}

function kuNumMinus(Obj) {
var selLen = Obj.selectionStart;
var oVal = $(Obj).val();
var tVal = oVal.replace(/[^-0-9]/g , "");
if (oVal != tVal) {
$(Obj).val(tVal);
CurserSet(Obj, selLen + tVal.length - oVal.length);
}
}

function kdNumMinus(Obj) {
var eKey = event.keyCode;
if (((eKey >= 48 && eKey <= 57) || (eKey >= 96 && eKey <= 105) || (eKey == 189 || eKey == 109) || eKey == 8 || eKey == 46 || eKey == 37 || eKey == 39 || eKey == 9) && (event.shiftKey == false)) {
}
else {
(event.preventDefault) ? event.preventDefault() : event.returnValue = false;
}
}

/* -- 숫자+점(.) -------------------------------------------------------------------------------------------------------------------*/
function ValidNumDot(Obj) {
var jObj = $(Obj);
var val = jObj.val();
var required = jObj.attr("d-required");
if(required.toLowerCase() != "true" && val == ""){
return true;
}

val = val.replace( /\./g, "")
var msg = jObj.attr("d-msg");
if(jObj.attr("d-required") == "true" && val == "" ){
if(jObj.val() == ""){
msgShow(Obj, msg + " 항목 값을 입력해주세요.");
}
else{
msgShow(Obj, msg + " 항목 입력값을 확인하여 주세요.");
}
}
else{
var ext = /[^0-9]/g;
if(ext.test(val)){
msgShow(Obj, msg + " 항목 입력값을 확인하여 주세요.");
}
else{
return true;
}
}
jObj.focus();
return false;
}

function kuNumDot(Obj) {
var selLen = Obj.selectionStart;
var oVal = $(Obj).val();
var tVal = oVal.replace(/[^.0-9]/g , "");
if (oVal != tVal) {
$(Obj).val(tVal);
CurserSet(Obj, selLen + tVal.length - oVal.length);
}
}

function kdNumDot(Obj) {
var eKey = event.keyCode;
if (((eKey >= 48 && eKey <= 57) || (eKey >= 96 && eKey <= 105) || eKey == 8 || eKey == 46 || eKey == 37 || eKey == 39 || eKey == 9 || eKey == 190 || eKey == 110) && (event.shiftKey == false)) {
}
else {
(event.preventDefault) ? event.preventDefault() : event.returnValue = false;
}
}

function IsValidate(){
var isSucc = true;
$("[d-valid]").each(function (){
if(isSucc){
var valid = $(this).attr("d-valid");
isSucc = eval(valid + "(this)");
}
});
if(isSucc){
alert("데이터 전송 로직을 작성하시면 됩니다.");
}
else{
return false;
}
}

var _focusObj;
function msgShow(Obj, Msg){
_focusObj = Obj;
AlertMsg(Msg);
}

function AlertMsg(Msg){
$(".layerConts").html(Msg);
$(".layer-main").show();
}

function closelayer(){
$(".layer-main").hide();
$(_focusObj).focus();
}
    </script>
</head>
<body>
<table style="width:600px;">
<colgroup>
<col style="width:60px;" />
<col style="width:140px;" />
<col style="width:60px;" />
<col style="width:140px;" />
<col style="width:200px;" />
</colgroup>
<tr>
<th>1-1항목</th>
<td>
<input type="text" style="width:100%;" d-valid="ValidNumber" d-required="true" d-msg="1-1항목" />
</td>
<th>1-2항목</th>
<td>
<input type="text" style="width:100%;" d-valid="ValidNumber" d-required="false" d-msg="1-2항목" />
</td>
<td>숫자만</td>
</tr>
<tr>
<th>2-1항목</th>
<td>
<input type="text" style="width:100%;" d-valid="ValidNumComma" d-required="true" d-msg="2-1항목" />
</td>
<th>2-2항목</th>
<td>
<input type="text" style="width:100%;" d-valid="ValidNumComma" d-required="false" d-msg="2-2항목" />
</td>
<td>숫자+콤마</td>
</tr>
<tr>
<th>3-1항목</th>
<td>
<input type="text" style="width:100%;" d-valid="ValidNumMinus" d-required="true" d-msg="3-1항목" />
</td>
<th>3-2항목</th>
<td>
<input type="text" style="width:100%;" d-valid="ValidNumMinus" d-required="false" d-msg="3-2항목" />
</td>
<td>숫자+장선(-)</td>
</tr>
<tr>
<th>4-1항목</th>
<td>
<input type="text" style="width:100%;" d-valid="ValidNumDot" d-required="true" d-msg="4-1항목" />
</td>
<th>4-2항목</th>
<td>
<input type="text" style="width:100%;" d-valid="ValidNumDot" d-required="false" d-msg="4-2항목" />
</td>
<td>숫자+점(.)</td>
</tr>
</table>
</body>
</html>
<input type="button" value="유효성체크"  onclick="IsValidate();"/>


<!----- 레이어 alert 메세지 ----->
<div class="layer-main">
    <div class="layer-popup">
        <div class="layer-container">
            <div class="layer-conts">
                <div class="layer-title">
                    <div class="layerTitle">
                        에러메세지....
                    </div>
                    <div class="layer-close" onclick="closelayer()">
                        <img src="/images/kr/cm/btn_popupClose.gif" alt="" />
                    </div>
                </div>
                <div class="layerConts">
                </div>
                <div>
                    <a href="javascript:closelayer();" class="">
                        닫기
                    </a>
                </div>
            </div>
        </div>
    </div>
</div>

2017년 2월 7일 화요일

레이어 중앙정렬 및 Block 처리(Css로 처리)

----실행해 보기 시작-------------------------------------------------------------------------


타이틀................................
레이어컨텐트
레이어컨텐트
레이어컨텐트
레이어컨텐트
레이어컨텐트


----실행해 보기 끝-------------------------------------------------------------------------
<!DOCTYPE HTML>
<html>
<head>
<style>
.layer-main {
z-index:2000;
display:none;
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
text-align: center;
background-color: rgba(0, 0, 0, 0.5);
}
.layer-main:before {
content: "";
display: inline-block;
height: 100%;
vertical-align: middle;
margin-right: -.25em;
}
.layer-popup {
display: inline-block;
vertical-align: middle;
background-color: #fff;
border: 1px solid #3571B5;
z-index: 10;
font-family:Tahoma;
}
.layer-popup .layer-container {
padding-bottom: 20px;
}

.layer-title {
overflow:hidden;
margin:0px;
padding:0px;
background-color: #474747;
height:36px;
}
.layerTitle {
float:left;
line-height:36px;
margin:0px;
padding:0px 0px 0px 10px;
font-size:15px;
color:#ffffff;
}

.layer-close {
float:right;
margin:0px;
padding:8px 10px;
cursor:pointer;
}

.layerConts {
clear:both;
margin-top:10px;
padding: 10px;
}
</style>
<script type="text/javascript">
function openlayer() {
document.getElementsByClassName("layer-main")[0].style.display = "block";
}
function closelayer() {
document.getElementsByClassName("layer-main")[0].style.display = "none";
}
function actionlayer() {
alert("actionlayer");
}
</script>
</head>

<body>
<div>ccccc<br>ccccc<br>ccccc<br>ccccc<br>ccccc<br>ccccc<br>ccccc<br>ccccc<br></div>
<div onclick="openlayer()">show click here</div>
<div class="layer-main">
    <div class="layer-popup">
        <div class="layer-container">
            <div class="layer-conts">
                <div class="layer-title">
                    <div class="layerTitle">
                        타이틀................................
                    </div>
                    <div class="layer-close" onclick="closelayer()">
                        <img src="/images/kr/cm/btn_popupClose.gif" alt="" />
                    </div>
                </div>
                <div class="layerConts">
레이어컨텐트<br>레이어컨텐트<br>레이어컨텐트<br>레이어컨텐트<br>레이어컨텐트<br>
                </div>
                <div>
                    <a href="javascript:actionlayer();" class="">
                        저장
                    </a>
                </div>

            </div>
        </div>
    </div>
</div>
</body>
</html>

2016년 9월 6일 화요일

common.js

String.prototype.format = function (args) { var newStr = this; for (var key in args) { newStr = newStr.replace('{' + key + '}', args[key]); } return newStr; } String.prototype.formatAll = function (args) { var newStr = this; for (var key in args) { newStr = newStr.split("{" + key + "}").join(args[key]); } return newStr; } String.prototype.getLpad = function (spad, len) { var str = this; while (str.length < len) str = spad + str; return str; } String.prototype.getDateFormat = function () { var Week = ['일요일', '월요일', '화요일', '수요일', '목요일', '금요일', '토요일']; var year = this.substring(0, 4); var month = this.substring(4, 6); var day = this.substring(6, 8); var date = new Date(year, parseInt(month) - 1, day); return { date: "{YY}.{MM}.{DD}".format({ YY: year.substring(2, 4), MM: month, DD: day }), fullDate: "{YYYY}.{MM}.{DD}".format({ YYYY: year.substring(0, 4), MM: month, DD: day }), week: Week[date.getDay()], month: month + "월", day: day, orginDate: date } } String.prototype.isBlank = function () { var str = this.trim(); for (var i = 0; i < str.length; i++) { if ((str.charAt(i) != "\t") && (str.charAt(i) != "\n") && (str.charAt(i) != "\r")) { return false; } } return true; } String.prototype.isEmail = function () { return (/\w+([-+.]\w+)*@\w+([-.]\w+)*\.[a-zA-Z]{2,4}$/).test(this.trim()); } String.prototype.isDomain = function () { return (/\w+([-.]\w+)*\.[a-zA-Z]{2,4}$/).test(this.trim()); } String.prototype.isPhone = function () { var arg = arguments[0] ? arguments[0] : ""; return eval("(/(02|0[3-9]{1}[0-9]{1})" + arg + "[1-9]{1}[0-9]{2,3}" + arg + "[0-9]{4}$/).test(this)"); } String.prototype.isMobile = function () { var arg = arguments[0] ? arguments[0] : ""; return eval("(/01[016789]" + arg + "[1-9]{1}[0-9]{2,3}" + arg + "[0-9]{4}$/).test(this)"); } String.prototype.isBirth = function () { return (/(19|20)[0-9]{2}[01]{1}[0-9]{1}[0123]{1}[0-9]{1}$/).test(this.trim()); } String.prototype.isIncKor = function () { return (/[ㄱ-ㅎ|ㅏ-ㅣ|가-하]/).test(this) ? true : false; } String.prototype.isKor = function () { return (/^[가-힣]+$/).test(this) ? true : false; } String.prototype.isEngkor = function () { return (/^[가-힣]+$/).test(this) ? true : (/^[a-zA-Z]+$/).test(this) ? true : false; } String.prototype.num = function () { return (this.trim().replace(/[^0-9]/g, "")); } String.prototype.isNum = function () { return (/^[0-9]+$/).test(this) ? true : false; } String.prototype.isEng = function () { return (/^[a-zA-Z]+$/).test(this) ? true : false; } String.prototype.isEngNum = function () { return (/^[0-9a-zA-Z]+$/).test(this) ? true : false; } String.prototype.money = function () { var num = this.trim(); while ((/(-?[0-9]+)([0-9]{3})/).test(num)) { num = num.replace((/(-?[0-9]+)([0-9]{3})/), "$1,$2"); } return num; } //</String.prototype> String.prototype.decodeEntity = function () { return this.replace(/&amp;/gi, "&").replace(/&lt;/gi, "<").replace(/&gt;/gi, ">"); }; String.prototype.decodeCode = function () { return this.replace(/&#39;/g, "'") .replace(/&#40;/g, "(") .replace(/&#41;/g, ")") .replace(/&#34;/g, "'") .replace(/&#60;/g, "<") .replace(/&#62;/g, ">") .replace(/&#x0D;/gi, "\r"); }; String.prototype.stripHtml = function () { return $('<div/>').html(this).text(); }; Date.prototype.yyyymmdd = function () { var yyyy = this.getFullYear().toString(); var mm = (this.getMonth() + 1).toString(); var dd = this.getDate().toString(); return yyyy + (mm[1] ? mm : "0" + mm[0]) + (dd[1] ? dd : "0" + dd[0]); }; String.prototype.decodeEntity = function () { return this.replace(/&amp;/gi, "&").replace(/&lt;/gi, "<").replace(/&gt;/gi, ">"); }; String.prototype.decodeCode = function () { return this.replace(/&#39;/g, "'") .replace(/&#40;/g, "(") .replace(/&#41;/g, ")") .replace(/&#34;/g, "'") .replace(/&#60;/g, "<") .replace(/&#62;/g, ">") .replace(/&#x0D;/gi, "\r"); }; String.prototype.stripHtml = function () { return $('<div/>').html(this).text(); }; Date.prototype.yyyymmddDash = function () { var yyyy = this.getFullYear().toString(); var mm = (this.getMonth() + 1).toString(); var dd = this.getDate().toString(); return yyyy + '-' + (mm[1] ? mm : "0" + mm[0]) + '-' + (dd[1] ? dd : "0" + dd[0]); }; $.is_mobile = function () {     //if(TOUR_CLI_TP=='W') return false;     if (_agent.match(/android/) || _agent.match(/(iphone|ipod|ipad)/)) {         return typeof arguments[0] == 'undefined' ? true : (function (a, cs) {             return a.match((cs == 'android' ? /android/ : /(iphone|ipod|ipad)/)) ? true : false;         })(_agent, arguments[0]);     }     return false; };

2016년 8월 19일 금요일

모바일 레이어 중앙 정렬 및 기타


<pre name="code" class="jscript">
<html lang="ko">
<head>
    <title>싸니까 믿으니까 인터파크 투어</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
    <style>
        .over-hidden {
            overflow: hidden;
        }

        .over-auto {
            overflow: auto;
        }

        .layer-container {
            position: absolute;
            top: 0px;
            left: 0px;
            z-index: 100;
            background-color: #fff;
            opacity: 1;
            width: 90%;
        }

        .back-layer {
            position: absolute;
            left: 0;
            top: 0;
            z-index: 99;
            background-color: #000000;
            width: 100%;
            opacity: 0.5;
        }

        .newlayer-container {
            position: absolute;
            top: 0px;
            left: 0px;
            width: 100%;
            z-index: 110;
            background-color: #fff;
            opacity: 1;
        }

        .newback-layer {
            position: absolute;
            left: 0;
            top: 0;
            z-index: 99;
            background-color: #808080;
            height: 100%;
            width: 100%;
            opacity: 1;
        }

        .playerlayer-container {
            position: absolute;
            top: 0px;
            left: 0px;
            width: 100%;
            height: 100%;
            z-index: 120;
            background-color: #fff;
            opacity: 1;
        }

    </style>

    <script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
        });

        function ShowBackCenterLayerTest(cnt, top) {
            var layerID = "center_" + cnt;
            var makeHtml = "";
            makeHtml += "  <div id='" + layerID + "' class='layer-container'>";
            for (var i = 0; i < cnt; i++) {
                makeHtml += "    <div> BackCenter컨텐츠_" + cnt + " </div>";
                if ((i + 1) % 10 == 0) {
                    makeHtml += "    <div onclick='fnCloseLayerAttr(this);' data-close='" + layerID + "'> 닫기</div>";
                }
            }
            makeHtml += "    <div onclick='fnCloseLayerAttr(this);' data-close='" + layerID + "'> 닫기</div>";
            makeHtml += "  </div>";

            fnMakeLayer(layerID, "body", makeHtml);
            fnShowCenterLayer(layerID, top, 500, "left", callback1);
        }

        function ShowBackTopLayerTest(cnt, top) {
            var layerID = "BackTop_" + cnt;
            var makeHtml = "";
            makeHtml += "  <div id='" + layerID + "' class='layer-container'>";
            for (var i = 0; i < cnt; i++) {
                makeHtml += "    <div> BackTop컨텐츠_" + cnt + " </div>";
                if ((i + 1) % 10 == 0) {
                    makeHtml += "    <div onclick='fnCloseLayerAttr(this);' data-close='" + layerID + "'> 닫기</div>";
                }
            }
            makeHtml += "    <div onclick='fnCloseLayerAttr(this);' data-close='" + layerID + "'> 닫기</div>";
            makeHtml += "  </div>";

            fnMakeLayer(layerID, "body", makeHtml);
            fnShowTopLayer(layerID, top, 500, "left", callback1);
        }

        function ShowNewTopLayerTest(cnt, top) {
            var layerID = "NewTop_" + cnt;
            var makeHtml = "";

            makeHtml += "<div id='" + layerID + "' class='newback-layer'>";
            makeHtml += "  <div class='newlayer-container'>";
            for (var i = 0; i < cnt; i++) {
                makeHtml += "    <div> NewTop컨텐츠_" + cnt + " </div>";
                if ((i + 1) % 10 == 0) {
                    makeHtml += "    <div onclick='fnCloseLayerAttr(this);' data-close='" + layerID + "'> 닫기</div>";
                }
            }
            makeHtml += "    <div onclick='fnCloseLayerAttr(this);' data-close='" + layerID + "'> 닫기</div>";
            makeHtml += "  </div>";
            makeHtml += "</div>";

            fnMakeLayer(layerID, "body", makeHtml);
            fnShowNewTopLayer(layerID, 500, "left", callback1);
        }

        function callback1() {
            console.log("callback1");
        }
    </script>
    <script type="text/javascript">
 var _arrLayerID = [];    // 리사이즈시 레이어를 제어하기위해 {layerID, topMargin, ShowType}

 $(window).resize(function () {
     setTimeout(function () {
  LayerResize()
     }, 30);
 });

 function LayerResize() {
     for (var i = 0; i < _arrLayerID.length; i++) {
  var jqueryObj = $("#" + _arrLayerID[i].layerID);
  if (jqueryObj.css("display") != "none") {
      if (_arrLayerID[i].ShowType == "fnShowCenter") {
   fnShowCenterLayer(_arrLayerID[i].layerID, _arrLayerID[i].topMargin, 0);
      }
      else if (_arrLayerID[i].ShowType == "fnShowTop") {
   fnShowTopLayer(_arrLayerID[i].layerID, _arrLayerID[i].topMargin, 0);
      }
  }
     }
 }

 function fnMakeLayer(layerID, parentID, makeHtml) {
     var layerSelecter = "#" + layerID;
     if ($(layerSelecter).length > 0) {
  return;
     }

     var parentSelecter = "";
     if (parentID == null || parentID == "" || parentID == "body") {
  parentSelecter = "body";
     }
     else {
  parentSelecter = "#" + parentID;
     }

     $(parentSelecter).append(makeHtml);
 }

 function fnSetLayer(ID, top, div) {
     var isAddAble = true;
     for (var i = 0; i < _arrLayerID.length; i++) {
  if (_arrLayerID[i].layerID == ID) {
      isAddAble = false;
  }
     }
     if (isAddAble) {
  _arrLayerID.push({ layerID: ID, topMargin: top, ShowType: div });
     }
 }

 function fnShowBackLayer(layerID, topMargin) {
     var backID = layerID + "back";
     if ($("#" + backID).length == 0) {
  var addHtml = $("<div></div>").attr("id", backID).addClass("back-layer");
  $("#divWrap").append(addHtml);
  $("#" + backID).bind('touchmove', function (e) { e.preventDefault() });
     }

     var con_h = $("#" + layerID).height() + $(window).scrollTop() + topMargin;
     var win_h = $(window).height();
     if (con_h > win_h) {
  $("#" + backID).height(con_h);
     }
     else {
  $("#" + backID).height(win_h);
     }

     $("#" + backID).show();

 }

 function fnShowCenterLayer(layerID, topMargin, duration, slideType, callback) {
     var layerSelecter = "#" + layerID;
     $(layerSelecter).removeClass("over-auto");
     $(layerSelecter).css("height", "auto");
     if (topMargin == null || topMargin == "") {
  topMargin = "0";
     }


     topMargin = Number(topMargin);
     fnSetLayer(layerID, topMargin, "fnShowCenter");

     //var win_w = $(window).width();
     //var win_h = $(window).height();
     var win_w = screen.width;
     var win_h = screen.height;
     var con_w = $(layerSelecter).width();
     var con_h = $(layerSelecter).height();
     var scrollTop = $(window).scrollTop();
     var movetop = ((win_h - con_h) / 2);
     var moveleft = (win_w - con_w) / 2;

     if (movetop < 0) {
  movetop = 0;
     }

     movetop += scrollTop + topMargin;
     if (con_h + (topMargin * 2) > win_h) {
  $(layerSelecter).css("height", win_h - (topMargin * 2));
     }

     $("body").css("overflow", "hidden");
     $(layerSelecter).css("overflow", "auto");
     $(layerSelecter).show();
     fnShowBackLayer(layerID, topMargin);
     $(layerSelecter).css("left", "100%").css("top", movetop);
     $(layerSelecter).animate({
  left: moveleft,
  top: movetop
     },
     duration,
     function () {
  if (callback != null) {
      callback();
  }
     });
 }

 function fnShowTopLayer(layerID, topMargin, duration, slideType, callback) {
     var layerSelecter = "#" + layerID;
     $(layerSelecter).css("height", "auto");
     if (topMargin == null || topMargin == "") {
  topMargin = "0";
     }
     topMargin = Number(topMargin);
     fnSetLayer(layerID, topMargin, "fnShowTop");

     var win_w = screen.width;
     var win_h = screen.height;
     var con_w = $(layerSelecter).width();
     var con_h = $(layerSelecter).height();
     var scrollTop = $(window).scrollTop();
     var movetop = topMargin;
     var moveleft = (win_w - con_w) / 2;

     if (movetop < 0) {
  movetop = 0;
     }


     movetop += scrollTop;

     $(layerSelecter).show();
     fnShowBackLayer(layerID, topMargin);
     $(layerSelecter).css("left", "100%").css("top", movetop);
     $(layerSelecter).animate({
  left: moveleft,
  top: movetop
     },
     duration,
     function () {
  if (callback != null) {
      callback();
  }
     });
 }

 function fnShowNewTopLayer(layerID, duration, slideType, callback) {
     var layerSelecter = "#" + layerID;
     $("body").css("overflow", "hidden");
     var scrollTop = $(window).scrollTop();
     $(layerSelecter).css("overflow", "auto");
     $(layerSelecter).css("left", "100%").css("top", scrollTop).show();
     $(layerSelecter).animate({
  left: 0,
  top: scrollTop
     },
     duration,
     function () {
  if (callback != null) {
      callback();
  }
     });
 }

 function fnCloseLayerAttr(obj) {
     var layerID = $(obj).attr("data-close");
     fnCloseLayer(layerID);
 }

 function fnCloseLayer(layerID) {
     $("body").css("overflow", "auto");
     $("#" + layerID + "back").hide();
     $("#" + layerID).hide();
     for (var i = 0; i < _arrLayerID.length; i++) {
  if (_arrLayerID[i].layerID == layerID) {
      _arrLayerID.splice(i, 1);
  }
     }
 }
    </script>
</head>
<body>
    <div id="divWrap">
        <div>줄바꿈<br /><br /></div>
        <div>줄바꿈<br /><br /></div>
        <div>줄바꿈<br /><br /></div>
        <div>
            <a href="javascript:ShowBackCenterLayerTest(5, 0);"> 레이어 센터(margintop 0) </a>
            <br />
            <br />
        </div>
        <div>
            <a href="javascript:ShowNewTopLayerTest(30, 0);"> 레이어 새창처럼 (margintop 0) </a>
            <br />
            <br />
        </div>
        <div>
            <a href="javascript:ShowBackCenterLayerTest(40, 20);"> 레이어 센터(margintop 20) </a>
            <br />
            <br />
        </div>
        <div>
            <a href="javascript:ShowBackCenterLayerTest(60, 80);"> 레이어 센터(margintop 80) </a>
            <br />
            <br />
        </div>
        <div>
            <a href="javascript:ShowBackCenterLayerTest(60, 0);"> 레이어 센터(margintop 0) </a>
            <br />
            <br />
        </div>
        <div>
            <a href="javascript:ShowBackTopLayerTest(10, 10);"> 레이어 Top (margintop 10) </a>
            <br />
            <br />
        </div>
        <div>
            <a href="javascript:ShowBackTopLayerTest(40, 20);"> 레이어 Top  (margintop 20)</a>
            <br />
            <br />
        </div>
        <div>
            <a href="javascript:ShowBackTopLayerTest(60, 80);"> 레이어 Top (margintop 80)</a>
            <br />
            <br />
        </div>
        <div>
            <a href="javascript:ShowBackTopLayerTest(60, 0);"> 레이어 Top (margintop 0)</a>
            <br />
            <br />
        </div>
        <div>
            <a href="javascript:ShowNewTopLayerTest(30, 0);"> 레이어 새창처럼 (margintop 0) </a>
            <br />
            <br />
        </div>
        <div>
            <a href="javascript:ShowNewTopLayerTest(60, 0);"> 레이어 새창처럼 </a>
            <br />
            <br />
        </div>
        <div>줄바꿈<br /><br /></div>
        <div>줄바꿈<br /><br /></div>
        <div>줄바꿈<br /><br /></div>
        <div>줄바꿈<br /><br /></div>
        <div>줄바꿈<br /><br /></div>
        <div>줄바꿈<br /><br /></div>
        <div>줄바꿈<br /><br /></div>
        <div>줄바꿈<br /><br /></div>
    </div>
</body>
</html>

</pre>