2012-11-15 33 views
11

Tôi đang cố xác thực tên người dùng bằng PHP bằng cách sử dụng regex và mọi thứ tôi gửi đều không thành công. Tôi vẫn còn mới ở đây.Sử dụng PHP regex để xác thực tên người dùng

if (!preg_match('/^[A-Za-z]{1}[A-Za-z0-9]{5-31}$/', $joinUser))

Rules:

  • Phải bắt đầu bằng chữ cái
  • 6-32 ký tự
  • Letters và số chỉ

Tôi đã làm việc với this online testerthis one too . Tôi đọc this threadthis thread nhưng không thể hiểu nhiều vì chúng có vẻ phức tạp hơn một chút so với tôi (lookaheads? Và các ký tự đặc biệt khác nhau).

Sau khi đọc chuỗi đầu tiên mà tôi liên kết, có vẻ như tôi là một trong những người không hiểu cách nói "chữ" tác động đến những gì được cho là có thể chấp nhận được, tức là ký tự nước ngoài, ký tự có dấu trọng âm, v.v. Tôi thực sự chỉ nhìn vào bảng chữ cái tiếng Anh (là ASCII này?) Và các số 0-9.

Cảm ơn.

Trả lời

28

Vấn đề duy nhất là, bạn đã viết sai chính tả định lượng cuối cùng.

{5-31} phải là {5,31}

nên regex của bạn sẽ là

if (!preg_match('/^[A-Za-z][A-Za-z0-9]{5,31}$/', $joinUser)) 

và bạn có thể bỏ qua {1}, nhưng nó không bị tổn thương.

+5

Geez. Tại sao nó luôn luôn là điều nhỏ nhất mà bạn không bao giờ nhìn thấy cho đến khi ai đó chỉ ra nó? Cảm ơn. – gtcharlie

+0

@gtcharlie, chỉ vì nó là một điều nhỏ nhất;) – NullPointer

2

Hãy thử điều này:

if (!preg_match('/^[A-Za-z][A-Za-z0-9]{5,31}$/', $joinUser)) 
3

Rõ ràng tất cả các bạn cần phải thay đổi là 5,31 5-31.

dụ làm việc:

if (preg_match('/^[A-Za-z]{1}[A-Za-z0-9]{5,31}$/', "moo123")) 
{ 
    echo 'succeeded'; 
} 
else 
{ 
    echo 'failed'; 
} 
+1

Cool Tôi đã quá muộn một lần nữa. Ít nhất tôi đã học được điều gì đó trong khi cố gắng giúp đỡ. –

Các vấn đề liên quan