2011-11-15 73 views
21

Tôi có regex sau ^[a-zA-Z0-9]+$ sẽ cho phép ký tự chữ số alpha. Vấn đề ở đây là nếu tôi chỉ nhập ký tự số như "897687", thì regex vẫn khớp. Tôi không muốn điều đó xảy ra. Nên có ít nhất một ký tự văn bản và nó sẽ bắt đầu bằng một ký tự văn bản. Ví dụ như "a343" hoặc "a98bder" hoặc "a4544fgf343"C# Regex chỉ cho phép alpha số

Sẽ tuyệt vời nếu bạn có thể giúp tôi cải thiện regex của mình cho việc này.

+2

Là một sang một bên, với "nên có ít nhất một bảng chữ cái và nó sẽ bắt đầu với một bảng chữ cái", sau này có nghĩa là trước đây sẽ luôn luôn là sự thật. Vì vậy, _requirement_ là "nó nên bắt đầu với một bảng chữ cái". Bây giờ để đi upvote Rowland kể từ khi ông hiểu điều này khá tốt :-) – paxdiablo

Trả lời

33

Âm thanh như bạn muốn:

^[a-zA-Z][a-zA-Z0-9]*$ 
4
^[a-zA-Z][a-zA-Z0-9]*$ 

Nên làm các trick!

Ngoài ra, nếu bạn muốn bao gồm tất cả chữ và số cộng với một dấu gạch dưới, bạn có thể sử dụng:

^[a-zA-Z][\w]*$ 
+0

Khoảng trắng chắc chắn không được bao gồm trong '\ w'. Trong .net nó là '[\ p {L} \ p {N} _]' nó bao gồm tất cả các chữ cái Unicode, số và (ít nhất) dấu gạch dưới. – stema

+0

@stema Xin lỗi lỗi đánh máy, đầu của tôi cho biết dấu gạch dưới, nhưng các ngón tay của tôi đã gõ khoảng trắng. Tốt, cảm ơn. –

11

Chỉ trong trường hợp mà các ký tự ASCII là tại một số điểm không đủ, đây phiên bản Unicode:

^\p{L}[\p{L}\p{N}]*$ 

\p{L} là bất kỳ điểm mã Unicode có lá thư bất động sản ==> Bất kỳ lá thư từ bất kỳ ngôn ngữ (có nghĩa là trong Unicode)

\p{N} là bất kỳ điểm mã Unicode có số tài sản ==> Bất kì kí tự số từ bất kỳ ngôn ngữ (có nghĩa là trong Unicode)

2

Chức năng này sẽ trở lại đúng hay sai dựa vào việc Regular Expression là lần xuất hiện hay không,

public static Boolean isAlphaNumeric(string strToCheck) 
    { 
     Regex rg = new Regex(@"^[a-zA-Z0-9\s,]*$"); 
     return rg.IsMatch(strToCheck); 
    } 
1

Hoặc một chút ít tiết hơn câu trả lời được chấp nhận:

^[a-zA-Z][\w]*$ 

C# regex có chỉ số lớp nhân vật "\ w" cho các ký tự chữ và số, nhưng không có một lớp nhân vật chỉ chữ cái (không có chữ số), do đó bạn phải chỉ định lớp đặt [a-zA-Z] theo cách thủ công.

+1

Như đã mô tả trước đây, [\ w] bao gồm ký tự gạch dưới không được yêu cầu trong bài gốc và không tương đương với câu trả lời được chấp nhận. https://msdn.microsoft.com/en-us/library/vstudio/20bw873z(v=vs.110).aspx#WordCharacter – fractor

0

Đây là giải pháp tốt nhất để kiểm tra chữ và số,

  • nếu nó chỉ là chuỗi - "Lỗi".
  • nếu chỉ là số nguyên - "Lỗi".
  • nếu nó là chữ và số - "Thành công".

    if (System.Text.RegularExpressions.Regex.IsMatch(txt.Text, @"[a-zA-Z]") && 
        System.Text.RegularExpressions.Regex.IsMatch(txt.Text, @"[0-9]")  
    { 
        // Success - It is alphanumric 
    } 
    else 
    { 
        // Error - It is not alphanumric 
    } 
    
Các vấn đề liên quan