2012-06-12 31 views

Trả lời

10

Bạn đang rất gần thực tế:

if(preg_match('/^user[0-9]{1,8}$/', $string)){ 

Các neo cho "phải phù hợp với lúc bắt đầu của chuỗi" nên tất cả các cách ở phía trước, tiếp theo là "người sử dụng" đen; sau đó bạn chỉ định ký tự đặt [0-9] và nhân số {1,8}. Cuối cùng, bạn kết thúc bằng neo "phải khớp ở cuối chuỗi".

Một vài ý kiến ​​về biểu hiện ban đầu của bạn:

  1. Các ^ phù hợp với sự khởi đầu của một chuỗi, do đó viết nó bất cứ nơi nào khác bên trong biểu thức này nhưng khi bắt đầu sẽ không mang lại kết quả mong đợi
  2. Các + là một số nhân; cũng vậy, nhưng chỉ có thể sử dụng một hệ số sau một biểu thức
  3. Trừ khi bạn dự định sử dụng các số bạn tìm thấy trong biểu thức, bạn không cần dấu ngoặc đơn.

Btw, thay vì [0-9] bạn cũng có thể sử dụng \d. Đây là một nhóm nhân vật tự động rút ngắn sự biểu hiện thường xuyên, mặc dù một đặc biệt này không lưu lại tất cả các nhân vật quá nhiều ;-)

2

Bạn đang ở rất gần, đây là regex của bạn: /^user[0-9]{1,8}$/

1

thử regex sau thay vì:

/^user([0-9]{1,8})$/

1

sử dụng regex này:

/^user\d{1,8}$/ 
3

Bằng cách sử dụng ^$, bạn chỉ phù hợp khi mẫu là thứ duy nhất trên dòng. Đó là điều bạn muốn? Nếu vậy, sử dụng như sau:

preg_match('/^user[0-9]{1,8}[^0-9]$/' , $string); 

Nếu bạn muốn tìm mô hình này bất cứ nơi nào trong một dòng, tôi sẽ cố gắng:

preg_match('/user[0-9]{1,8}[^0-9]/' , $string); 

Như mọi khi, bạn nên sử dụng một công cụ tham khảo như RegexPal làm kiểm tra biểu thức chính quy của bạn trong sự cô lập.

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