Hướng dẫn php regex alphanumeric and underscore - php regex chữ và số và gạch dưới

Trên trang đăng ký của tôi, tôi cần xác thực tên người dùng là chỉ có chữ và số, nhưng cũng với các dấu gạch dưới tùy chọn. Tôi đã nghĩ ra điều này:

function validate_alphanumeric_underscore($str) 
{
    return preg_match('/^\w+$/',$str);
}

Có vẻ như hoạt động ổn, nhưng tôi không phải là một chuyên gia Regex! Có ai phát hiện ra bất kỳ vấn đề nào không?

Hỏi ngày 25 tháng 8 năm 2009 lúc 20:14Aug 25, 2009 at 20:14

3

Các ký tự phù hợp thực tế của \w phụ thuộc vào ngôn ngữ đang được sử dụng:

Một ký tự "từ" là bất kỳ chữ cái hoặc chữ số nào hoặc ký tự dấu gạch dưới, nghĩa là bất kỳ ký tự nào có thể là một phần của "từ" perl. Định nghĩa về các chữ cái và chữ số được kiểm soát bởi các bảng ký tự của PCRE và có thể thay đổi nếu kết hợp phù hợp cụ thể của ngôn ngữ đang diễn ra. Ví dụ, trong ngôn ngữ "fr" (tiếng Pháp), một số mã ký tự lớn hơn 128 được sử dụng cho các chữ cái có dấu và chúng được khớp bởi \ w.word". The definition of letters and digits is controlled by PCRE's character tables, and may vary if locale-specific matching is taking place. For example, in the "fr" (French) locale, some character codes greater than 128 are used for accented letters, and these are matched by \w.

Vì vậy, bạn nên chỉ định rõ ràng rõ ràng những ký tự bạn muốn cho phép:

/^[A-Za-z0-9_]+$/

Điều này chỉ cho phép các ký tự chữ và số và dấu gạch dưới.

Và nếu bạn muốn cho phép dấu gạch dưới chỉ là ký tự kết hợp và muốn buộc tên người dùng phải bắt đầu bằng ký tự bảng chữ cái:

/^[A-Za-z][A-Za-z0-9]*(?:_[A-Za-z0-9]+)*$/

Đã trả lời ngày 25 tháng 8 năm 2009 lúc 20:16Aug 25, 2009 at 20:16

Hướng dẫn php regex alphanumeric and underscore - php regex chữ và số và gạch dưới

GumbogumboGumbo

631K107 Huy hiệu vàng768 Huy hiệu bạc838 Huy hiệu đồng107 gold badges768 silver badges838 bronze badges

7

Dưới đây là chức năng tùy chỉnh để xác thực chuỗi bằng cách sử dụng php ctype_alnum kết hợp với một mảng ký tự được phép:


Zuul

16.1k6 Huy hiệu vàng60 Huy hiệu bạc88 Huy hiệu Đồng6 gold badges60 silver badges88 bronze badges

Đã trả lời ngày 28 tháng 11 năm 2012 lúc 8:45Nov 28, 2012 at 8:45

1

try

function validate_alphanumeric_underscore($str) 
{
    return preg_match('/^[a-zA-Z0-9_]+$/',$str);
}

Đã trả lời ngày 25 tháng 8 năm 2009 lúc 20:16Aug 25, 2009 at 20:16

GumbogumboPhill Pafford

631K107 Huy hiệu vàng768 Huy hiệu bạc838 Huy hiệu đồng90 gold badges260 silver badges380 bronze badges

Dưới đây là chức năng tùy chỉnh để xác thực chuỗi bằng cách sử dụng php ctype_alnum kết hợp với một mảng ký tự được phép:

ZuulAug 25, 2009 at 20:17

16.1k6 Huy hiệu vàng60 Huy hiệu bạc88 Huy hiệu ĐồngLucas Oman

Đã trả lời ngày 28 tháng 11 năm 2012 lúc 8:452 gold badges44 silver badges45 bronze badges

1

Phill Paffordphill Pafford

/^[A-Za-z][A-Za-z0-9]*(?:_+[A-Za-z0-9]+)*$/

82.1K90 Huy hiệu vàng260 Huy hiệu bạc380 Huy hiệu đồngJan 14, 2013 at 16:44

Hướng dẫn php regex alphanumeric and underscore - php regex chữ và số và gạch dưới

Trông ổn với tôi. Lưu ý rằng bạn không yêu cầu đặt vị trí của dấu gạch dưới, vì vậy cả "người dùng_" và "___username" sẽ vượt qua.André Catita

Đã trả lời ngày 25 tháng 8 năm 2009 lúc 20:1717 silver badges19 bronze badges

Lucas Omanlucas Oman

15.4K2 Huy hiệu vàng44 Huy hiệu bạc45 Huy hiệu đồng

Tôi sẽ lấy Regex thứ cấp của Gumbo, để chỉ cho phép nhấn mạnh như là sự kết hợp, nhưng thêm A + sau _ để người dùng có thể giống như "Đặc biệt Tên", chỉ là một điều chỉnh nhỏ.

(source)

Đã trả lời ngày 14 tháng 1 năm 2013 lúc 16:44Aug 25, 2009 at 20:26

Có phải là một nhân vật đặc biệt trong Regex?

Regex không nhận ra dấu gạch dưới là nhân vật đặc biệt..

Có phải là một nhân vật chữ và số?

Theo định nghĩa, các ký tự chữ và số chỉ bao gồm các chữ cái A đến Z và các chữ số 0 đến 9. Không gian và dấu gạch dưới thường được coi là ký tự dấu câu, vì vậy không, chúng không nên được phép.no, they shouldn't be allowed.

Ví dụ tên người dùng chữ và số là gì?

Một ví dụ về chữ và số của một tên người dùng sẽ là một cái gì đó giống như John John01, hoặc John Johnsm1th.“John01” or “JOhnSm1th”.

Regex cho chữ và số là gì?

Biểu hiện
Sự mô tả
[]
Cũng có thể được sử dụng trên một loạt các ký tự được phân tách bằng một ký tự.
[0-9]
khớp với bất kỳ chữ số nào.
[A-Z]
khớp với bất kỳ ký tự alpha chữ hoa nào
[A-Za-z0-9]
khớp với bất kỳ ký tự chữ và số nào
Chuỗi biểu thức chính quy tiêu chuẩn - ForcePointwww.websense.com ›Thư viện