내가 02145
또는 05145
또는 02145
, 05879
, 02445
처럼 빈 텍스트 상자 또는 텍스트와 일치하는 regular expression
와 textbox
유효성을 검사 할 필요가 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 텍스트 상자에 하나 이상의 숫자를 입력하지 않으면 제출 버튼이 활성화되지 않습니다 아래에 사용됩니다. 빈 텍스트 상자를 허용하기 만하면됩니다. 어떻게해야합니까? 읽어 주셔서 감사합니다
^(\ s * (0 [25] \ d {3})? ((0 [25] \ d {3}) *?) \ s *)? $'또는 ((, 0 (2 | 5) [0-9] {8}) *?) \ s *)? $ (0 (2 | 5) [0-9] {8} '작동하지만 제안과 약간 다릅니다. 감사합니다. –
공백을 허용하고 싶습니다. 나는 그 대답에 덧붙였다. 두 패턴 모두 여전히 '*?'를 포함하고 있기 때문에 고정 된 크기의 숫자를 매치 할 때 아무 의미가 없습니다. – Guffa