2012-01-06 41 views
16

Tôi có những điều sau trong mã C# của tôi - những gì tôi thích nó là kiểm tra xem biểu thức có số hay dấu gạch ngang nhưng không có gì khác. Nếu tôi gõ chữ K cùng với dấu gạch ngang hoặc số thì nó vẫn chấp nhận nó. Làm thế nào để tôi nói chỉ có các số nhanh hoặc dấu gạch ngang:C# Regex cho số và dấu gạch ngang chỉ

 Match match = Regex.Match(input, @"[0-9-]"); 

Lưu ý rằng đầu vào là văn bản mà tôi chuyển để đánh giá.

+1

Biểu thức của bạn có nghĩa là phải có số hoặc dấu gạch ngang ở đâu đó trong chuỗi. Không phải là nó chỉ có thể chứa các ký tự này và không có gì khác. –

+1

lý do tại sao -1? Anh ta đang đặt câu hỏi về một regex không hoạt động, đưa ra mã liên quan và những gì anh ta hy vọng đạt được. – mynameiscoffey

Trả lời

34
Match match = Regex.Match(input, @"^[0-9-]*$"); 

Các ^ có nghĩa là trận đấu nên bắt đầu vào đầu của đầu vào, các $ rằng nó nên kết thúc ở phần cuối của đầu vào.

* có nghĩa là (chỉ) 0 hoặc nhiều số hoặc dấu gạch ngang phải ở đó (sử dụng + thay cho 1 hoặc nhiều hơn).

+0

không được gạch ngang thoát như sau: 'Trận đấu = Regex.Match (đầu vào, @"^[0-9 \ -] $ ");'? –

+7

Không, dấu gạch ngang ở đầu hoặc cuối (giữa '[]') là dấu gạch ngang chữ, không phải là ký tự phạm vi. –

1

Bạn cần thoát khỏi dấu gạch ngang thứ hai.

Match match = Regex.Match(input, @"[0-9\-]"); 

Tôi sẽ thừa nhận tôi đã không dùng thử, nhưng nó sẽ hoạt động.

Điều này thực sự chỉ hoạt động với một ký tự. Nếu bạn muốn nó kéo dài hơn một ký tự, như "123-5", sau đó thay đổi regex của bạn để ..

Match match = Regex.Match(input, @"[0-9\-]+"); 
+1

Sine thứ hai - không thể là một phạm vi nó là không cần thiết để thoát khỏi nó –

+0

@rich - Tôi không biết đó là sự thật, cảm ơn! –

9

Regex của bạn khớp với bất kỳ chữ số hoặc dấu gạch ngang tồn tại trong chuỗi, hãy thử như sau :

Regex.Match(input, @"^[\d-]+$"); 

^ Bắt đầu chuỗi

[\d-]+ một hoặc nhiều chữ số hoặc dấu gạch ngang

$ Kết thúc chuỗi

+0

Cảm ơn, nó hoạt động như tôi mong đợi. Khi tôi nhập vào một giá trị, nó không chấp nhận nói 9999K.Điều gì trong biểu thức nói không chấp nhận bất kỳ giá trị alpha nào? –

+0

như mô tả ở trên, regex nói rằng chỉ một hoặc nhiều chữ số hoặc dấu gạch ngang có thể tồn tại giữa đầu và cuối chuỗi. Lý do bạn cho phép thư thông qua là vì bạn chỉ xác minh rằng một chữ số hoặc dấu gạch ngang tồn tại trong chuỗi. '^' Và '$' đảm bảo rằng tôi đang kiểm tra toàn bộ chuỗi, không phải bất kỳ phần nào của chuỗi đó xảy ra để khớp. – mynameiscoffey

2

Bất kỳ Regex nào sau đây đều hoạt động tốt.

[0-9\-]+ (+ one or more occurance) 

[\d\-]+ (as \d represents numbers) 

nếu bạn muốn - phải nằm giữa chữ số

[\d]+\-*[\d]+ will match any of following 
90909900 
9090-9009 
900--900 

nếu bạn muốn sử dụng chỉ có một - hoặc không có - giữa chữ số, sau đó

[\d]+\-?[\d]+ will match any of following 
90909900 pass 
9090-9009 pass 
900--900 fail 
+1

[\ d] + \ - * [\ d] + chính xác là những gì tôi đang tìm kiếm. –

0

Nếu đó là một mảng của chuỗi , xem xét để làm cho nó được thực hiện với LINQ?

if (arrInput.Any(s => (!Regex.IsMatch(s, @"^[\d-]+$")))){ //OK } 
Các vấn đề liên quan