2013-06-21 3 views
1

В моем классе C# я украшаю свойство аннотациями данных для проверки 5-значного числа. Номер должен иметь мин. И макс. 5 цифр. Но он всегда говорит недействительно. Что не так с моим регулярным выражением?Data Annotations Fails

[RegularExpression(@"^\(?([0-9]{5})\)$", ErrorMessageResourceType = typeof (GlobalErrorResource), ErrorMessageResourceName = "QUOTEREQUEST_VALID_ZIP_CODE")] 
+0

У вас есть '[обязательно]' атрибут с '[RegularExpression]'? – Dima

+0

Проблема заключается в том, что ваше регулярное выражение соответствует буквенной скобке '(' ')', но вы никогда не заявляли, что хотите это сделать. –

+0

@JonathonReinhart, можно ли объяснить подробно pls, я не могу понять –

ответ

0

По моему мнению / / используется в JavaScript.

Попробуйте это регулярное выражение @"^(\d{5})$"

\ д если для [0-9] группы

{5} как вы знаете длину требуется.

{1,5} вы можете это сделать, если хотите указать минимальную (1) и максимальную (5) длину.

+0

+1, спасибо, он отлично работает ... –

1

Вы также можете попробовать это выражение

"^[0-9]{5,5}$" 
+0

+1, спасибо за разные идеи ... может вы объясняете это выражение PLS? –

0

Регулярное выражение:

 |-------------- start of group 1 
     v  v----- end of group 1 
@"^\(?([0-9]{5})\)$" 
    ^^^^^^ ^-- end of line 
    || | | | |---- literal right parenthesis ")" 
    || | | |------- match 5 times 
    || | |----------- match characters '0' thru '9' 
    || |--------------- non-greedy match (I believe) 
    ||----------------- literal left parenthesis "(" 
    |------------------ start of line 

ли вы на самом деле хотите, чтобы соответствующие круглые скобки, как "(12345)"?

0

Вы также можете создать свой собственный атрибут для этого:

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false)] 
public class ZipAttribute : System.ComponentModel.DataAnnotations.RegularExpressionAttribute 
{ 
    public ZipAttribute() : base("\\A\\b[0-9]{5}(?:-[0-9]{4})?\\b\\z") 
    { 
     ErrorMessage = "Invalid ZIP code."; 
    } 
} 

Чтобы использовать его, вам нужно будет добавить строку в Global.asax

DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(ZipAttribute), typeof(RegularExpressionAttributeAdapter)); 
0

Используйте это для Zip код 5 или 9 цифр

[Display(Name = "Zipcode"), RegularExpression("[0-9]{5}(-[0-9]{4})?", ErrorMessage="Zipcode must be in the proper format: '12345' or '12345-6789'")] 
0

вы можете использовать это.

[RegularExpression(@"[0-9]{5}")] 

Когда вы \ (, вы подтверждаете, что вы должны добавить скобки, чтобы поместить почтовый индекс.