2012-01-12 48 views
6

Tôi cho phép người dùng tạo tiểu sử của riêng họ trên trang web của tôi để họ có thể chọn url của họ. Vì vậy, ví dụ: nếu tên của họ là John Smith, họ có thể muốn nhập john-smith và sau đó URL tiểu sử của họ sẽ là www.mysite.com/john-smith.preg_match để xác thực một URL slug

Tôi cần sử dụng preg_match để xác thực rằng những gì họ nhập là một URL hợp lệ. Vì vậy, đây là các quy tắc mà nó phải thực hiện đầy đủ mới có giá trị:

nó phải chứa ít nhất một chữ cái và nó chỉ có thể chứa các chữ cái, chữ số và dấu gạch ngang

Ai đó có thể giúp tôi ra xin tôi giỏi PHP nhưng rác với regex!

Trả lời

14

Tôi hy vọng mã này là tự giải thích:

<?php 

function test_username($username){ 
    if(preg_match('/^[a-z][-a-z0-9]*$/', $username)){ 
     echo "$username matches!\n"; 
    } else { 
     echo "$username does not match!\n"; 
    } 
} 

test_username("user-n4me"); 
test_username("[email protected]") 

Nhưng nếu không, hàm test_username() kiểm tra đối số của nó đối với mẫu:

  • bắt đầu (^) ...
  • với một chữ cái ([a-z]) ...
  • Tiếp theo bất kỳ số lượng chữ cái, số hoặc dấu gạch ngang ([-a-z0-9]*) ...
  • và không có bất cứ điều gì sau đó ($). giải pháp
+1

Điều này không thành công cho 'không hợp lệ - slug' – Victor

+0

@Victor, bạn có thể thử:/^ [a-z] (- [a-z0-9] +) * $ / –

1

Khá đơn giản, nếu chúng ta giả định rằng nhân vật đầu tiên phải là một chữ cái ...

/[a-z]{1}[a-z0-9\-]*/i 
1

tốt hơn:

function is_slug($str) { 
    return preg_match('/^[a-z0-9](-?[a-z0-9]+)$/i', $str); 
} 

Các xét nghiệm:

  • thất bại: -user-tên
  • thất bại: hướng dẫn - tên
  • thất bại: tên người dùng-
  • hợp lệ : tên người dùng
  • hợp lệ: user123-tên-321
  • hợp lệ: username
  • hợp lệ: USER123 tên
  • hợp lệ: username-2

Thưởng thức!

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