Je développe une application WPF (.NET 3.5)
où je dois valider un textbox
avec un regular expression
pour correspondre zone de texte vide ou texte comme 02145
ou 05145
ou 02145
, 05879
, 02445
. l'expression que j'utilise est ^(0(2|5)[0-9]{3})?((,0(2|5)[0-9]{3})*?)$
.Comment écrire un nombres séparés par des virgules validation d'expression régulière pour textbox WPF
Cela fonctionne presque juste que je ne vais pas me laisser avoir une zone de texte vide. voici un code
<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>
et la classe utilisée pour la validation est inférieure
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; }
}
}
cela fonctionne bien mais le bouton d'envoi ne sera pas actif à moins de type i un ou plusieurs numéros dans la zone de texte de txtNumbers. Je veux juste qu'il autorise la boîte de texte vide. Comment devrais-je y parvenir? Merci d'avoir lu
Bonjour merci pour le conseil '^ (\ s * (0 [25] \ d {3})? ((, 0 [25] \ d {3}) *?) \ S *)? $' Ou '^ (\ s * (0 (2 | 5) [0-9] {8})? ((, 0 (2 | 5) [0-9] {8}) *?) \ s *)? $ 'fonctionne mais c'est légèrement différent de votre suggestion. merci –
Je vois, vous voulez également autoriser les espaces. J'ai ajouté cela à la réponse. Vos deux modèles contiennent toujours '*?' Pour faire une correspondance non gourmande, ce qui est inutile lorsque vous faites correspondre un nombre de taille fixe. – Guffa