안녕하세요. IT김군입니다.


저번 휴대전화번호 정규식 / 체크디지트에 이어 차량번호 정규식 / 체크디지트를 가볍게 만들어 봤습니다.


C# / .NET은 구글링을 해도 정규식이 잘 나오지 않아 직접 만들어 써야하는군요...........ㅠㅠ


완벽하지는 않지만 이 정도면 되겠다 싶으신 분들이 사용하시면 될 것 같습니다.


제가 만든 정규식은 아래와 같습니다.


@"(([0-9]{2}[가-힣]{1}[0-9]{4}|[가-힣]{2}[0-9]{2}[가-힣]{1}[0-9]{4}))"


'00가0000' 혹은 '지역00가0000' 두 가지 경우의 차량번호를 체크합니다.


'00가0000'의 경우는 앞에 2자리는 0~9까지의 숫자가 들어올 수 있으며, 3번째 자리는 한글만 들어올 수 있고, 나머지 4자리도 0~9까지 숫자만 들어올 수 있게 처리하였습니다.


그리고 | 를 활용하여 or로 지역00가0000의 경우까지 대처하도록 하여


'지역00가0000'의 경우에는


앞 2자리는 한글, 3~4번째는 숫자, 5번째는 한글, 마지막 4자리는 숫자만 들어올 수 있도록 처리하였습니다.


빠르게 만들어서 사용하려다보니 받침 등을 써도 체크하지 못하는 부분과 0000 이런 숫자가 들어갈 수 있는 부분에 대해서는 처리가 되지 않았지만,


이 정도만 사용해도 괜찮다 하시는 분들만 참고해주세요~


아래는 제가 코딩한 활용 방안입니다.


// 차량번호 체크
private void carNumCheck()
{
    string carNum = "11가1111";

    if (carNum.Length == 7 || carNum.Length == 9)
    {
        Regex regex = new Regex(@"(([0-9]{2}[가-힣]{1}[0-9]{4}|[가-힣]{2}[0-9]{2}[가-힣]{1}[0-9]{4}))");
        Match m = regex.Match(carNum);
        if (m.Success)
        {
            MessageBox.Show("@@ Success");
        }
        else
        {
            MessageBox.Show("@@ Fail");
        }
    }
    else
    {
        MessageBox.Show("자릿 수 맞지 않음.");
    }
}


잘못된 부분이나 궁금하신 점 댓글주세요.


도움이 되셨다면 공감 한 번씩만 꼭! 부탁드리겠습니다.


감사합니다.




WRITTEN BY
IT김군
S/W 개발자 김군의 메모장

트랙백  0 , 댓글  0개가 달렸습니다.
secret

안녕하세요. IT김군입니다.


핸드폰 번호를 체크하는 정규식을 사용하려 했는데 JavaScript나 Java의 경우 구글에 무수하게 많은데


C# 정규식의 경우 구글링을 해도 잘 나오지 않아서 직접 만들어야 했습니다.


다른 분들의 경우 제가 만든게 활용할만 하시면 사용하시라고 포스팅합니다.


제가 만든 정규식은 아래와 같습니다.


하이픈 없이 입력 시
@"01{1}[016789]{1}[0-9]{7,8}"

하이픈 포함하여 입력 시
@"01{1}[016789]{1}-[0-9]{3,4}-[0-9]{4}"


하이픈 없이 입력 시에는


10자리나 11자리 (0111231234 혹은 01012341234 등)에 따라


처음 01이 들어오며 세 번째 자리에는 010, 011, 016, 017, 018, 109만 허용할 수 있게 0, 1, 6, 7, 8, 9만 입력할 수 있도록 했습니다.


그리고 뒤에 올 수 있는 7자리 혹은 8자리는 0~9의 숫자만 입력할 수 있도록 체크하였습니다.



하이픈 포함하여 입력 시에는


12자리나 13자리 (011-123-1234 혹은 010-1234-1234 등)에 따라


처음 01이 들어오며 세 번째 자리는 위와 동일하게 하였고, 네 번째 자리에 하이픈(-)을 체크하며 그 다음 3자리나 4자리가 0~9의 숫자만 들어올 수 있고


마지막 4자리가 0~9의 숫자만 들어올 수 있게 체크하였습니다.



그래서 활용방안 소스는 아래와 같이


phoneNumCheck()는 하이픈없이 입력 시에 활용 방안이고


phoneNumCheck2()는 하이픈까지 입력 시 활용 방안입니다.


using System.Text.RegularExpressions;

// 휴대전화번호 체크 (하이픈 없을 시)
private void phoneNumCheck()
{
    string phone = "01012341234";
    if (phone.Length == 10 || phone.Length == 11)
    {
        Regex regex = new Regex(@"01{1}[016789]{1}[0-9]{7,8}");

        Match m = regex.Match(phone);
        if (m.Success)
        {
            MessageBox.Show("@@ Success");
        }
        else
        {
            MessageBox.Show("@@ 휴대전화 번호 아님");
        }
    }
    else
    {
        MessageBox.Show("@@ 자릿수 맞지 않음");
    }

}

// 휴대전화번호 체크 (하이픈 포함)
private void phoneNumCheck2()
{
    string phone = "011-123-1234";
    if (phone.Length == 12 || phone.Length == 13)
    {
        Regex regex = new Regex(@"01{1}[016789]{1}-[0-9]{3,4}-[0-9]{4}");

        Match m = regex.Match(phone);
        if (m.Success)
        {
            MessageBox.Show("@@ Success");
        }
        else
        {
            MessageBox.Show("@@ 휴대전화 번호 아님");
        }
    }
    else
    {
        MessageBox.Show("@@ 자릿수 맞지 않음");
    }

}


잘못된 부분이나 궁금하신 점 댓글주세요.


도움이 되셨다면 공감 한 번씩만 꼭! 부탁드리겠습니다.


감사합니다.












WRITTEN BY
IT김군
S/W 개발자 김군의 메모장

트랙백  0 , 댓글  0개가 달렸습니다.
secret

안녕하세요. IT 김군입니다.


C# / .NET 정규표현식이 구글링해서 나오는게 많이 없더군요..


그래서 혹시나 필요할지 몰라 메모합니다.


정규 표현식에 사용되는 특수 문자

'.'  => 점

임의의 한 문자를 의미합니다.

a.c -> abc, aec, avc, …

.us -> bus, cus, dus, …

'*'

바로 앞의 문자가 없거나 하나 이상인 경우

s*e -> e, se, see, ssse, …

abc* -> ab, abc, abcc, abccc, …

h*im -> im, him, hhim, hhhim, …

'+'

바로 앞의 문자가 하나 이상

s+e -> se, sse, ssse, …

'?'

바로 앞의 문자가 없거나 하나뿐인 경우

th?e -> e, the 두가지 표현이 유일함

'^'

바로 뒤의 문자열로 시작

^The.. 뒷부분부터 공백까지 검사. -> The girl is, Theather

^a?bc -> bc, abc, …

^.e -> he, me, request, settle, …

^s.e?.. E는 나와도되고 안나와도 됩니다. -> sa, sae, sb, sbe, …

'$'

바로 앞의 문자열로 종료

a?bc$ -> eeabe, seebc, bc..

+.e$ -> onthetoe, bctae, appetittle, …

s?c+$ -> e, se, ee, eee, seee, seee, …

'[ ]'

[ ] 안에 있는 문자 중 하나(범위의 경우 '-'로 지정합니다.)

[ab]cd -> acd, bcd, …

[a-z] -> 알파벳 소문자

[a-zA-Z] -> 알파벳

[0-9] -> 숫자

ag[a-z] -> aga, agbcd, agzzz, …

^ab[cd]ef -> abcef, abdef, …

^[a-zA-Z] -> 영문자로 시작

^[가-힣] 한글로 시작해야 할 때

[a^-zA-Z0-9] -> '^' 표시가 대괄호 안으로 들어갈 경우 제외의 의미가 됩니다. 부정의 의미. ->영문자나 숫자로 시작할 수 없습니다.

[a-zA-Z0-9]$ -> 영문자나 숫자로 종료

"[가-힣]" -> 한글 완성형만 가능합니다. "ㅋㅋ", "ㅎㅎ" 같은 구문은 불가능합니다.

"[abc]" -> abc중 하나라는 뜻 -> c#문법으로 if("a" || "b" || "c")와 같음.

'{ }'

{ } 앞의 문자나 문자열의 출현 횟수, Schema에서 min / maxoccur과 같은 개념

a{2}b -> aab, … -> a가 꼭 2회 나와야 함

a{2, }b -> aab, aaab, aaaab, … -> a가 2회 이상 나와야 함

a{2, 3}b -> aa, aaab -> a가 2회~3회 나와야 함

'( )'

( )안에 있는 문자를 그룹화

a(bc){2} -> abcbc -> a 다음 bc가 2회 나와야 함

a(bc)* -> abcbcbcbc -> a 다음 bc의 출현이 무한대로 가능 함

'|'

or 연산자

영어로만 아이디를 만들라 -> [a-zA-Z]+ 공백없는 영어단어

He|She -> he, she is..

(He|She)is -> Heis, Sheis

특수문자 사용

^ [] $ () | * + ? {} \

앞부분에 \를 붙여서 사용합니다.

\*+ -> *가 하나 이상 포함된 패턴.. -> *나 **나 ***이 무한대로 가능

\d : 정수

\d{2, 3} - / d{3,4} - / d{4} : 전화번호 찾는 정규식

\D : 숫자가 아닌 나머지 모두

\w : [a-zA-Z0-9]의 줄임 표현

\W : [^a-zA-Z0-9] 영문자와 숫자만 아니면 됨.

\s : 공백

\S : 공백이 아닌 나머지



감사합니다.


WRITTEN BY
IT김군
S/W 개발자 김군의 메모장

트랙백  0 , 댓글  0개가 달렸습니다.
secret

안녕하세요. IT 김군입니다.


핸드폰 번호를 하이픈 없이 입력 받아 하이픈을 넣어서 사용하여야 할 때 하이픈 넣는 방법에 대해 알아보도록 하겠습니다.


많은 방법이 있지만 저는 제일 쉽게 접할 수 있는 Substring으로 쪼개서 "-"를 중간중간 더하는 방식으로 진행하였습니다.


0111234567과 같은 10자리 번호와 01012345678과 같은 11자리 번호에 대해서 처리하였습니다.


저는 정규식으로 전화번호가 맞는지 먼저 체크하고 이 코드를 타기 때문에 가볍게 10인지 아닌지만 구분했지만


if / else 문의 조건을 조금만 수정하면 더욱 더 완벽하게 처리하실 수 있으실거에요.


해당 소스는 아래와 같습니다.


public void phoneNumHyphen(){
    string phone = "0110000000";
    string str_phoneNumHyphen;

    string[] phoneNumSplit = new string[3];

    if (phone.Length == 10)
    {
        phoneNumSplit[0] = phone.Substring(0, 3);
        phoneNumSplit[1] = phone.Substring(3, 3);
        phoneNumSplit[2] = phone.Substring(6, 4);
    }
    else
    {
        phoneNumSplit[0] = phone.Substring(0, 3);
        phoneNumSplit[1] = phone.Substring(3, 4);
        phoneNumSplit[2] = phone.Substring(7, 4);
    }

    str_phoneNumHyphen = phoneNumSplit[0] + "-" + phoneNumSplit[1] + "-" + phoneNumSplit[2];

    MessageBox.Show("@@ PhoneNum : " + str_phoneNumHyphen);
}


위 소스로 빌드하면 아래와 같은 결과를 얻을 수 있습니다.




추가!!!!!!!!


더 간단한 방법이 있었습니다.


private void phoneNumHyphen()
{
    string phoneNum= "01012341234";
    string phoneNumHyphen;

    if (phoneNum.Length == 11)
    {
        phoneNumHyphen = phoneNum.Insert(3, "-");
        phoneNumHyphen = phoneNumHyphen.Insert(8, "-");
    }
    else
    {
        phoneNumHyphen = phoneNum.Insert(3, "-");
        phoneNumHyphen = phoneNumHyphen.Insert(7, "-");
    }
    MessageBox.Show("@@ PhoneNum : " + phoneNumHyphen);
}


잘못된 부분이나 궁금하신 점 댓글주세요.


도움이 되셨다면 공감 한 번씩만 부탁드리겠습니다.


감사합니다.



WRITTEN BY
IT김군
S/W 개발자 김군의 메모장

트랙백  0 , 댓글  0개가 달렸습니다.
secret

안녕하세요. IT김군입니다.


오늘은 C# / WPF 에서 생성한 컨텐츠를 보이기 / 숨기기 (Visible / Hidden)에 대해 알아보도록 하겠습니다.


button이라는 Name을 가진 Button을 생성했다고 가정 시

WinForm에서는
button.visible = true;
button.visible = false;

위와 같은 방식으로 진행했었는데 WPF에서는 되지 않더라구요...


그래서 찾아보니 아래와 같이 하시면 될 것 같습니다.

WPF에서는
button.Visibility = Visibility.Visible;
button.Visibility = Visibility.Hidden;


궁금하신 점이나 잘못된 점 있다면 댓글주세요.


감사합니다.


WRITTEN BY
IT김군
S/W 개발자 김군의 메모장

트랙백  0 , 댓글  1개가 달렸습니다.
  1. 감사합니다. 찾고있었는데 도움이 됬습니다
secret

안녕하세요. IT김군입니다.


오늘은 C# / WPF를 활용한 CheckBox 사용법과 TextBox (Content) Enable / Disable 연계에 대해 알아보도록 하겠습니다.


크게 방법은 두 가지가 있습니다.


1. WPF xaml 파일에서 코딩



이렇게 TextBox와 CheckBox를 각각 생성하여 TextBox에 이벤트를 걸어주는 방법이 첫 번째 입니다.


<Textbox Name="tb_test" Width="100" Height="30"

IsEnabled="{Binding ElementName=cb_test, Path=IsChecked}">

</Textbox> <Checkbox Name="cb_test" Width="100" Height="30">체크박스</Checkbox>



xaml 파일에서만 완료 가능합니다.




2. WPF에서 View를 만들고 C#에서 코딩


- WPF xaml 파일 소스



<TextBox Name="tb_test" Width="100" Height="30"/>
<CheckBox Name="cb_test" Width="100" Height="30" 
    Checked="cb_test_Checked" Unchecked="cb_test_Unchecked">체크박스</CheckBox>



- cs 소스



private void cb_test_Checked(object sender, RoutedEventArgs e)
{
      tb_test.IsEnabled = true;
      Console.Write("@@ Check : " + cb_test.IsChecked);
}

private void cb_test_Unchecked(object sender, RoutedEventArgs e)
{
      tb_test.IsEnabled = false;
      Console.Write("@@ Check : " + cb_test.IsChecked);
}




위 두 가지 방법으로 작업하시면 아래 보시는 것과 같이 체크박스를 활용해 TextBox를 활성화 비활성화의 컨트롤을 하실 수 있습니다.




감사합니다.


WRITTEN BY
IT김군
S/W 개발자 김군의 메모장

트랙백  0 , 댓글  0개가 달렸습니다.
secret

안녕하세요. IT김군입니다.


이번에는 WPF에서 예, 아니오 (YesNo) 메시지박스를 출력하는 방법에 대해 알아보도록 하겠습니다.



소스는 위와 같습니다.


단순하게 메시지박스를 띄우시기만 한다면

MessageBox.Show("내용","타이틀",MessageBoxButton.YesNo);

까지만 작성하시면 되는데요.


if문 뒤에 조건은 Yes를 클릭하였을 때와 No를 클릭하였을 때의 이벤트를 구분하기 위해서 해 놓은 것입니다.

- C#의 경우
DialogResult.Yes

- WPF의 경우
MessageBoxResult.Yes

위와 같이 상황에 맞추어 사용하시면 됩니다.


감사합니다.



WRITTEN BY
IT김군
S/W 개발자 김군의 메모장

트랙백  0 , 댓글  0개가 달렸습니다.
secret

안녕하세요. IT김군입니다.


아래는 C#으로 폴더를 생성하는 방법입니다.


string folderPath = "D:/createFolder";
DirectoryInfo di = new DirectoryInfo(folderPath);

// 만약 폴더가 존재하지 않으면
if(di.Exists == false)
{
   di.Create();
}


위의 간단한 소스로 폴더를 생성하실 수 있습니다.


변수 folderPath에 생성할 폴더의 경로를 string으로 넣어주신 후에 DirectoryInfo를 활용하여 폴더의 유무를 체크한 후


폴더를 생성하는 소스입니다.


감사합니다.


WRITTEN BY
IT김군
S/W 개발자 김군의 메모장

트랙백  0 , 댓글  0개가 달렸습니다.
secret

안녕하세요. IT김군입니다.


오늘은 WPF에서 투명 창 만드는 법에 대해 메모해보도록 하겠습니다.


투명창 만드는 방법은 매우 간단합니다.


아래 보이는 것과 같이 3개의 설정값만 넣어주면 됩니다.





WindowStyle="None"
AllowsTransparency="True"
Background="{x:Null}"


위 3개의 설정을 넣어주신 후 빌드를 해보시면 아래 화면과 같이 버튼만 떠있는 화면을 보실 수 있습니다.






감사합니다.






WRITTEN BY
IT김군
S/W 개발자 김군의 메모장

트랙백  0 , 댓글  0개가 달렸습니다.
secret

안녕하세요. IT김군입니다.


오늘은 C#으로 Xml 파일 생성 및 읽어오기에 대해 메모해보겠습니다.


기본적인 내용이라 계층 구조 등은 따로 구글링하여 작업해주셔야 할 것 같습니다.

using System.Xml;
using System.IO;


먼저 Xml을 생성하고 Node를 생성 후 값을 넣는 부분입니다.

string xmlFilePath = "D:/";
 try
{
        XmlWriterSettings settings = new XmlWriterSettings();
        settings.Indent = true;
        settings.NewLineOnAttributes = true;
        XmlWriter xmlWriter = XmlWriter.Create(sFilePath + "/TestXml.xml");
        xmlWriter.WriteStartDocument();

        xmlWriter.WriteStartElement("root");
        xmlWriter.WriteElementString("Node1", "Value1");
        xmlWriter.WriteElementString("Node2", "Value2");
        xmlWriter.WriteEndDocument();

        xmlWriter.Flush();
        xmlWriter.Close();
}
catch (Exception except)
{
         Console.WriteLine(except.Message);
 }



아래는 생성했던 Xml파일을 읽어오는 부분입니다.

string xmlNodeName = "";
string xmlValue = "";
string xmlFilePath = "D:/";

try
{
     if (File.Exists(xmlFilePath + "/TestXml.xml"))   //  경로에 xml 파일이 있는지 체크
     {
          XmlTextReader xmlReadData = new XmlTextReader(xmlFilePath + "/TestXml.xml");    //  xml Open
          while (xmlReadData.Read())
          {
    		 if (xmlReadData.NodeType == XmlNodeType.Element)
			 {
	              switch (xmlReadData.Name.ToUpper().Trim())
				  {
		             case "NODE1": 
                                       xmlNodeName = xmlReadData.ReadString().ToString().Trim(); 
                                       break;
		             case "NODE2": 
                                       xmlValue = xmlReadData.ReadString().ToString().Trim(); 
                                       break;
				   }
		      }
           }
	        xmlReadData.Close();
	  }
      else // 해당 경로에 xml 파일이 없을 때
	  { 
	      Console.WriteLine("@@ Xml 존재하지 않음");            
	  }   
}
catch (Exception except)
{
	  Console.WriteLine(except.Message);
}

Console.WriteLine("@@ Product : " + xmlNodeName);
Console.WriteLine("@@ Worker : " + xmlValue);


도움이 되셨으면 좋겠습니다.


감사합니다.



WRITTEN BY
IT김군
S/W 개발자 김군의 메모장

트랙백  0 , 댓글  0개가 달렸습니다.
secret