2011-10-25 31 views
5

Tôi phải kiểm tra đầu vào của người dùng để đảm bảo tên, họ (vv ...) được nhập chính xác và hợp lệ. Tôi có để xây dựng một regexp mà kiểm tra nếu người dùng nhập lặp đi lặp lại ký tự trong tên, họ cuối cùng vv ...Ghi lại các chữ cái lặp lại trong PHP - Biểu thức chính quy

Ví dụ:

  • AAAron = xấu vì 3 của một
  • Aaron = tốt
  • Hannah = tốt
  • Hannnah = xấu vì 3 N

có một biểu thức chính quy PHP để nắm bắt những trường hợp S? (Tôi có một kiến ​​thức regexp cơ bản nhưng điều này là quá nhiều đối với tôi)

EDIT: này nên phép số cũng như: David 3 hoặc III

Cảm ơn

+8

Ai được bạn để xác nhận tên của ai đó trên chính tả? :) –

+0

Điều này có thực sự cần thiết không? Không cần phải làm nhiều hơn là xác nhận độ dài của tên. Nếu người dùng không muốn viết tên riêng của mình, anh ta chỉ có thể viết bất cứ điều gì xuống mà có giá trị, chẳng hạn như "John Doe". Ngược lại, regexp của bạn có thể sẽ làm mất hiệu lực một số tên hiếm/kỳ lạ hơn. Tôi sẽ không làm điều này. –

+1

Có thể trùng lặp của [Làm thế nào tôi có thể tìm thấy các chữ cái lặp lại với một regex Perl?] (Http://stackoverflow.com/questions/178837/how-can-i-find-repeated-letters-with-a-perl-regex) – breiti

Trả lời

14

Bạn có thể sử dụng lại tài liệu tham khảo cho mục đích đó.

preg_match('/(\w)(\1+)/', $subject, $matches); 
print_r($matches); 

các \1 phương tiện lặp lại việc bắt giữ đầu tiên như vậy trong trường hợp đó \w.

Trong trường hợp ví dụ của bạn, tôi không nghĩ rằng việc sử dụng cụm từ thông dụng sẽ là giải pháp tốt nhất, tại sao bạn không tính số lượng cá thể của bất kỳ ký tự nào?

ví dụ:

$charCountArray = array(); 
foreach ($name as $char) { 
    $charCountArray[$char]++; 
} 

trở lại tham chiếu là một tính năng tiên tiến, may mắn là các chức năng PCRE hỗ trợ nó.

Lưu ý: preg_match sẽ phù hợp chỉ có một thứ tự, nếu bạn cần phải biết tất cả các trận đấu xin vui lòng sử dụng preg_match_all

+0

cảm ơn rất tốt đẹp – Tech4Wilco

5

Hãy thử biểu hiện này thường xuyên:

/(\w)\1{2}/ 
Các vấn đề liên quan