2010-07-15 9 views
0

내가 02145 또는 05145 또는 02145, 05879, 02445처럼 빈 텍스트 상자 또는 텍스트와 일치하는 regular expressiontextbox 유효성을 검사 할 필요가 WPF (.NET 3.5) 응용 프로그램을 개발하고 있어요에 대한 정규식 유효성 검사를 작성하는 방법. 내가 사용하는 표현은 ^(0(2|5)[0-9]{3})?((,0(2|5)[0-9]{3})*?)$입니다.쉼표로 구분 된 숫자를 WPF 텍스트 상자

그것은 거의 작동하지 않습니다. 나는 빈 텍스트 박스를 허용하지 않을 것입니다. 여기에 몇 가지 코드

<Window.Resources> 
    <data:Message x:Key="message"/> 
    <Style x:Key="validButton" TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}" > 
     <Setter Property="IsEnabled" Value="False"/> 
     <Style.Triggers> 
      <MultiDataTrigger> 
       <MultiDataTrigger.Conditions> 
        <!-- ......--> 
        <Condition Binding="{Binding ElementName=txtNumbers, Path=(Validation.HasError)}" Value="false"/> 
       </MultiDataTrigger.Conditions> 
       <Setter Property="IsEnabled" Value="True" /> 
      </MultiDataTrigger> 
     </Style.Triggers> 
    </Style> 

<TextBox Height="23" Margin="-194.5,-88,-195.5,0" Name="txtNumbers" VerticalAlignment="Top" Style="{StaticResource txtboxerrors}"> 
         <TextBox.Text> 
          <Binding Path="Numbers" Source="{StaticResource message}" ValidatesOnDataErrors="True" UpdateSourceTrigger="PropertyChanged"> 
           <Binding.ValidationRules> 
            <ExceptionValidationRule /> 
           </Binding.ValidationRules> 
          </Binding> 
         </TextBox.Text> 
</TextBox> 
<Button Height="23" Margin="0,0,-81,-189" Name="btnSendSMS" VerticalAlignment="Bottom" HorizontalAlignment="Right" Width="75" Click="btnSubmit_Click" Style="{StaticResource validButton}">Submit</Button> 

이며, 클래스 유효성 검사가

class Message :IDataErrorInfo 
{ 
    //... 
    private string numbers; 



    public string this[string columnName] 
    { 
     get 
     { 
      string result = null; 
      //..... 
      if (columnName == "Numbers") 
      { 
//multicellRegex has the ^(0(2|5)[0-9]{3})?((,0(2|5)[0-9]{3})*?)$ expression     if(!Util.ValidateRegexPatern(Properties.Resources.multicellRegex,this.numbers)) 
       { 
        result = "Number not in the correct format.try 020xx or 05xxx,026xx"; 
       } 
      } 


      return result; 
     } 
    } 

    public string Error 
    { 
     get { return null; } 
    } 

    //..... 
     public string Numbers 
     { 
      get { return numbers; } 
      set { numbers = value; } 
     } 


} 

이 잘하지만 작동 내가 txtNumbers 텍스트 상자에 하나 이상의 숫자를 입력하지 않으면 제출 버튼이 활성화되지 않습니다 아래에 사용됩니다. 빈 텍스트 상자를 허용하기 만하면됩니다. 어떻게해야합니까? 읽어 주셔서 감사합니다

답변

2

당신은, 전체 패턴은 선택이 아닌 별도의 부품을해야하거나 ,02000이 유효한 항목이라고 생각합니다 어쨌든 더 강력 시작과 끝에서 길 잃은 공백을 캡슐화

시도 .

각 번호의 길이가 특정이기 때문에 일치하지 않도록 할 필요가 없습니다 (*? 사용). 될 숫자의 주위에 공백에 대한 허용

^((0[25]\d{3})(,0[25]\d{3})*)?$. 

: 변경 알림을 통해, 당신의 논리를 적용 할 수 있도록 뷰 모델이로드를 시작할 때 뷰 모델에서

^\s*((0[25]\d{3})(\s*,\s*0[25]\d{3})*)?\s*$. 
+0

^(\ s * (0 [25] \ d {3})? ((0 [25] \ d {3}) *?) \ s *)? $'또는 ((, 0 (2 | 5) [0-9] {8}) *?) \ s *)? $ (0 (2 | 5) [0-9] {8} '작동하지만 제안과 약간 다릅니다. 감사합니다. –

+0

공백을 허용하고 싶습니다. 나는 그 대답에 덧붙였다. 두 패턴 모두 여전히 '*?'를 포함하고 있기 때문에 고정 된 크기의 숫자를 매치 할 때 아무 의미가 없습니다. – Guffa

1

정규식이 좋으며 원하는 것을 수행합니다. 아마도 텍스트 상자에 빈 공간이 있습니다.

^\s*(0(2|5)[0-9]{3})?((,0(2|5)[0-9]{3})*?)\s*$ 
0

, 그냥 Numbers =string.Empty을 설정하고 당신은 당신이 원하는 효과를 얻을 것입니다.

건배.

관련 문제