2013-09-05 1 views
1

좋은 PO Box 정규식을 찾기 위해이 사이트를 둘러 보았습니다. 내가 좋아하거나 일하기를 끊임없이 찾지 못했기 때문에 직접 만들려고 노력했습니다 ... 나는 그것에 대해 꽤 기분이 좋지만 여기에 친절한 사람들이 그것에 구멍을 뚫을 수 있다고 확신합니다 :) 그래서 ... 어떤 문제가 이것으로 보입니까? 그리고 어떤 잘못된 긍정/잘못된 음조로 생각할 수 있습니까? 그게 끝날거야?PO Box RegEx 문자열 시작 부분

내가 볼 수있는주의 사항 중 하나는 PO 상자 패턴이 문자열의 시작 부분에 있어야한다는 것입니다. 그러나 그 밖의 다른 문제가 있습니까?

public bool AddressContainsPOB(string Addr) 
{ 
    string input = Addr.Trim().ToLower(); 
    bool Result = false; 

    Regex regexObj1 = new Regex(@"^p(ost){0,1}(\.){0,1}(\s){0,2}o(ffice){0,1}(\.){0,1}((\s){1}|b{1}|[1-9]{1})"); 
    Regex regexObj2 = new Regex(@"^pob((\s){1}|[0-9]{1})"); 
    Regex regexObj3 = new Regex(@"^box((\s){1}|[0-9]{1})"); 

    Match match1 = regexObj1.Match(input); 
    if (match1.Success) 
    { Result = true; } 
    Match match2 = regexObj2.Match(input); 
    if (match2.Success) 
    { Result = true; } 
    Match match3 = regexObj3.Match(input); 
    if (match3.Success) 
    { Result = true; } 
    return Result; 
} 
+0

줄 사이를 읽습니다. 나는 주소를 다루는 신청서와 함께 일하고 있으며, CASS에 우편 주소를 신뢰할 수있는 거래로 찾은 유일한 방법을 먼저 증명하고, 당신이 돌아 오는 결과 세트로부터 당신의 논리를 구축하십시오. [http://en.wikipedia.org/wiki/Coding_Accuracy_Support_System] – pufferfish

+0

그건 아주 좋은 지적입니다. Tim, 저는 CASS 솔루션에 투자 할만한 사례를 확실히 만들어야합니다 ... 그러면 많은 문제를 해결할 수 있습니다. 우리는 자주 (자주), PO Box를 다루는 것 이상으로 다룹니다. – user2051706

답변

1

우리에게 무엇을 기대합니까? 우리에게 유효/유효하지 않은 문자열조차주지 마십시오. 어떻게 정규식을 테스트 했습니까?

은 내가 유효한 입력에 대해 뭔가를 알고하지 않고, 첫 눈에 알 것은 : 내가 볼 수

  1. 하나주의는 PO 상자 패턴이 문자열의 시작에 있어야한다는 것이다

    문자열 시작 부분에서만 일치 시키길 원하십니까? 당신은 그것을 알고 당신의 패턴으로 그것을 정의 할 필요가 있습니다. 원하지 않는 경우 문자열 앵커 ^의 시작 부분을 제거하고 word boundary\b으로 바꿉니다.

  2. 불필요한 부분 만 제거하면됩니다.

  3. {0,1}의 경우 shortform ?이 있습니다. 더 짧기 때문에이 방법이 더 좋습니다.

  4. ^box((\s){1}|[0-9]{1})은 "상자"다음에 공백이오고 뒤에 숫자가옵니다. 이게 정말 당신이 원하는 것입니까?

  5. (\.) 첫 번째 정규식 : 왜 단일 점을 그룹화합니까?

+0

몇 가지 효율성 개선 사항을 추가해 주셔서 감사합니다.이 두 가지를 모두 포함합니다 (요점 4의 부족 - 원하는 동작) – user2051706

관련 문제