2017-03-03 46 views
9

Dưới đây là quy tắc của tôi cho tên dự án:Laravel 5.4 - Validation với Regex

$this->validate(request(), [ 
    'projectName' => 'required|regex:/(^([a-zA-z]+)(\d+)?$)/u', 
]; 

Tôi cố gắng để thêm quy tắc như vậy mà nó phải bắt đầu bằng chữ cái từ a-z hoặc A-z và có thể kết thúc với số lượng nhưng hầu hết là không.

giá trị hợp lệ cho tên dự án:

myproject123 
myproject 
MyProject 

giá trị không hợp lệ cho tên dự án:

123myproject 
!myproject 
myproject 123 
my project 
my project123 

tôi đã cố gắng regex trực tuyến của tôi:

enter image description here

https://regex101.com/r/FylFY1/2

Nó sẽ hoạt động, nhưng tôi có thể vượt qua xác thực ngay cả với project 123.

CẬP NHẬT: Nó thực sự hoạt động, tôi chỉ thử nghiệm nó trong bộ điều khiển sai, im xin lỗi ... nhưng có lẽ nó sẽ giúp những người khác vẫn

Trả lời

18

Quy tắc của bạn cũng là thực hiện NHƯNG bạn cần phải biết, xác định quy tắc xác thực bằng regex được phân tách bằng đường ống có thể dẫn đến đến hành vi không mong muốn.

Cách thích hợp để xác định quy tắc xác nhận nên:

$this->validate(request(), [ 
    'projectName' => 
     array(
      'required', 
      'regex:/(^([a-zA-Z]+)(\d+)?$)/u' 
     ) 
]; 

Bạn có thể đọc trên các tài liệu chính thức:

regex: mẫu

Các lĩnh vực được thẩm định phải phù hợp với biểu thức chính quy.

Lưu ý: Khi sử dụng mẫu regex, có thể cần để xác định các quy tắc trong mảng thay vì sử dụng dấu phân tách, đặc biệt nếu cụm từ thông dụng chứa ký tự ống.

https://laravel.com/docs/5.4/validation#rule-regex

+0

up. biến thể của tôi thực sự hoạt động quá, tôi chỉ kiểm tra nó trên bộ điều khiển sai:/ – Black

+2

@EdwardBlack Vẫn thực hành tốt để sử dụng một Mảng cho các xác thực regex, bây giờ là okey, nhưng trong trường hợp bạn cần thêm các đường ống bên trong mẫu regex trên Tương lai. :) – Troyer

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