// 비주얼스튜디오 > 도구 > 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") //{ //} } } }
삽질 이제 그만!!
2025년 2월 5일 수요일
유튜브-변환
변환
// 비주얼스튜디오 > 도구 > 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일 수요일
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(/&/gi, "&").replace(/</gi, "<").replace(/>/gi, ">");
};
String.prototype.decodeCode = function () {
return this.replace(/'/g, "'")
.replace(/(/g, "(")
.replace(/)/g, ")")
.replace(/"/g, "'")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/
/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(/&/gi, "&").replace(/</gi, "<").replace(/>/gi, ">");
};
String.prototype.decodeCode = function () {
return this.replace(/'/g, "'")
.replace(/(/g, "(")
.replace(/)/g, ")")
.replace(/"/g, "'")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/
/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>
피드 구독하기:
글 (Atom)