2009-12-18 8 views
2

주어진 문자열이 "유효한"이름인지 확인하는 정규 표현식을 작성하려고합니다. 이름 - 문자열은 데이터베이스에서 검색된 다음 이상한 문자가 포함되어 있는지 확인합니다. (이것은 스웨덴어 시스템을위한 것이기 때문에 스웨덴의 이름에서 흔히 사용되는 이상한 문자들을 포함시켜야합니다.))C#의 정규 표현식 문제

문제는 이것이 먹는 모든 단일 문자열에서 실패한다는 것입니다. 내 생각 엔 정규 표현식이 올바르게 종료되지 않았고 문자열 끝에 오류가 발생했다는 것입니다. 그러나 나는 이유를 알 수 없다. 다음과 같은

그래서 내 정규식 보인다 - 나는 예 모두에서 정규식 문자열을 시도했다 :

public static bool NameCheck(string name) 
    { 
     if(name == "" || name == " " || name == null) 
     { 
      return false; 
     } 

     //Regex regex = new Regex(@"/^[a-zåäöÅÄÖáéóúýíüÁÉÓÚÝÍÜ\-\.]+([---\s][a-zåäöÅÄÖáéóúýíüÁÉÓÚÝÍÜ\-\.]+)+/i"); 
     Regex regex = new Regex(@"/^[a-zåäöÅÄÖáéóúýíüÁÉÓÚÝÍÜ\-\.]+([---\s][a-zåäöÅÄÖáéóúýíüÁÉÓÚÝÍÜ\-\.]+)+$/i"); 

     return regex.IsMatch(name); 
    } 

모든 응시자?

참고 : 공백을 처리 할 필요가 없도록 정규식 검사 전에 문자열을 분할하여 시스템의 문제를 해결하지만 정규식이 작동하지 않는 이유가 궁금합니다.

Regex regex = new Regex(@"^[a-zåäöÅÄÖáéóúýíüÁÉÓÚÝÍÜ\-\.]+([---\s][a-zåäöÅÄÖáéóúýíüÁÉÓÚÝÍÜ\-\.]+)+$", 
         RegexOptions.IgnoreCase); 
+0

이렇게하면 안됩니다. 당신의 첫 번째 이민자가 자신의 이름으로 I를 표시하면 어떻게됩니까? 또는 다른 무엇이든지. 나는 이상한 성격의 그 이름 중 하나를 가지고 있으며 그것이 일어날 때마다 내 이름을 입력 할 수 없도록 질색합니다. – erikkallen

+0

결국 고객이 전화합니다. 나는 너와 동의한다. 그것은 결국 데이터베이스를 이상한 캐릭터로부터 자유롭게하려고 할 때 매우 복잡한 문제입니다. (특히 실제 정책이없는 경우) –

답변

5

C#을 정규 표현식은 "/"구분 기호를 사용하지 말아야합니다 또는 Łukasz-es?으로 간주하고 정규 표현식을 사용하면 유니 코드가 알파 숫자로 정의하는 것을 고려해야합니까? \w도 [0-9]와 일치하지만, 두 번째 정규식의 값을 항상 확인할 수 있습니다.

[---\s]

뭐라고? [\s-]는 어떨까요?

+0

실제 사용해서는 안됩니다. 기본적으로 sed/perl/Javascript 일 뿐이며 일반 표현식과는 아무런 관련이 없습니다. 또는 다른 구현에서. – Joey

+0

글쎄, 나는 ... 실제로 한 곳에서 시도했지만 RegexOptions.IgnoreCase는 마지막에 포함시키지 않았다. 감사! –

1

[a-zåäöÅÄÖáéóúýíüÁÉÓÚÝÍÜ\-\.]

그래서 당신이 어떤 비요른-의이 없을거야 : 다음과 같은 구문을 사용한다, 그래서