2011-04-21 4 views
2

나는 C# 및 .NET을 사용하고 있는데 내가 그러나 내가 원하는하지 않는 모든 숫자가 아닌 문자와 일치이정규식을 및 -.

"\D" 

과 같은 정규식이 해당 소수점 (.)과 음수 부호 (-)를 일치시킵니다. 정규 표현식으로 어떻게 할 수 있습니까?

그래서 나는 크리스 시도 '와 그것을 작동하게하는 몇 가지 조정을 :

(I는 "원본"의 이름을 가진 텍스트 상자를)

private void Original_TextChanged(object sender, EventArgs e) { 
     Regex regex = new Regex(@"[^\d.-]", RegexOptions.IgnoreCase); 
     Match match = regex.Match(Original.Text); 
     if (match.Success) { 
      Original.Text = regex.Replace(Original.Text, ""); 
      Original.SelectionStart = Original.TextLength; 
     } 
    } 

Original.SelectionStart = Original.TextLength;이 때마다 그것을 때문이다 사용자가 조금 더 이상하게 보일 것입니다.

답변

5

negated character class을 사용하면 숫자를 제외 할 수 있습니다 (.-). 이와 같이 단일 문자를 일치시키는 표현식은 [^\d\.\-]입니다. 캐럿은 클래스가 무효임을 나타냅니다.

Regex.IsMatch("a f", @"^[^\d\.\-]+$"); // true 
Regex.IsMatch("a_f", @"^[^\d\.\-]+$"); // true 
Regex.IsMatch("a.f", @"^[^\d\.\-]+$"); // false 
Regex.IsMatch("af-", @"^[^\d\.\-]+$"); // false 
Regex.IsMatch("-42", @"^[^\d\.\-]+$"); // false 
Regex.IsMatch("4.2", @"^[^\d\.\-]+$"); // false 
+2

사실 그 위치에서'-'를 벗어날 필요가 없습니다.'[^ \ d \ .-] '도 완벽하게 사용할 수 있습니다. – mousio

+1

@mousio : 예! 좋은 점은, 나는 항상 그 일에 조심 스럽다. 어리석은 미신, 나는 생각한다. –

+2

도트를 이스케이프 할 필요가 없습니다. 괄호 문자 클래스는 정규식의 나머지 부분과 (거의) 완전한 구문을 가지고 있다는 것을 기억하십시오. '[^ \ d .-]'는 실제로 작동 할 것입니다. 즉, HYPHEN-MINUS를 탈출 한 사람들을 비난하는 것은 어려운 일입니다. 왜냐하면 HYPHEN-MINUS와 탈의자는 정상적인 마법을 없애기 위해 탈출 할 필요가 있는지에 대해 민감하기 때문입니다. – tchrist

관련 문제