2013-06-13 34 views
25

trên php tôi sử dụng preg_match để xác thực văn bản nhập.php chỉ cho phép chữ cái, số, dấu cách và ký hiệu cụ thể sử dụng tiền tố

if(preg_match('/^[a-zA-Z0-9]+$/', $firstname)) { 
} 

Nhưng điều này chỉ cho phép chữ và số và không cho phép khoảng trống. Tôi muốn cho phép dấu cách, alpha và số. và dấu chấm (.) và dấu gạch ngang (-)

Vui lòng giúp tôi ở đây? cảm ơn trước.

+0

Chỉ cần cố gắng thêm rằng tất cả trong regex của bạn. – Rikesh

Trả lời

30

Sử dụng

preg_match('/^[a-z0-9 .\-]+$/i', $firstname) 
+1

cảm ơn, tôi tin rằng đây là những gì tôi cần – CudoX

+0

Bạn được chào đón .... – Baba

+0

Theo quy tắc, tôi có xu hướng tránh đơn giản là một khoảng trắng trong regex (vì nó thực sự có thể đại diện cho một số ký tự khác nhau tùy thuộc vào mã hóa trình soạn thảo của bạn) và rõ ràng bằng cách sử dụng '\ 040'. – HorusKol

2

Các chỉ chút khó khăn ở đây là các dấu gạch ngang.

Đối với không gian và dấu chấm, bạn chỉ có thể thêm chúng vào lớp nhân vật của bạn, như vậy:

'/^[a-zA-Z0-9 .]+$/' 

dễ dàng.

Dấu gạch ngang hơi khó hơn vì dấu gạch ngang có ý nghĩa đặc biệt trong lớp nhân vật như thế này (như bạn đã biết, chúng được sử dụng cho phạm vi ký tự như a-z). Để chỉ định một dấu nối trong một lớp nhân vật, nó phải là ký tự đầu tiên trong lớp (nghĩa là nó không được giữa hai ký tự, nếu không nó được coi là một dấu ký tự phạm vi ký tự).

Vì vậy, biểu hiện của bạn sẽ là:

'/^[-a-zA-Z0-9 .]+$/' 

Hy vọng rằng sẽ giúp.

+0

điều này có ích. bây giờ tôi thậm chí còn hiểu thêm cú pháp đúng đắn cho hàm preg_match. – CudoX

+3

Không phải là ký tự đầu tiên cho dấu gạch ngang, bạn có thể thoát khỏi nó bằng cách sử dụng '\\ ' –

14

Nếu bạn không chỉ muốn cho phép ASCII, sau đó sử dụng Unicode properties:

preg_match('/^[\p{L}\p{N} .-]+$/', $firstname) 

\p{L} là bất kỳ lá thư trong bất kỳ ngôn ngữ, cũng phù hợp với Trung Quốc, tiếng Hebrew, tiếng Ả Rập, ... ký tự.

\p{N} bất kỳ loại nhân vật số (cũng có nghĩa là chữ số ví dụ roman)

nếu bạn muốn giới hạn để chữ số, sau đó sử dụng \p{Nd}

+1

nếu bạn muốn quốc tế hóa, tại sao không sử dụng' \ p {N} 'thay vì' 0-9' –

+0

@CasimiretHippolyte, tất nhiên điều đó sẽ nhất quán, – stema

+2

Tôi tin rằng bạn nên thêm công cụ sửa đổi 'u' nếu điều này hoạt động đúng trong PHP. Như sau: preg_match ('/^[\ p {L} \ p {N} .-] + $/u', $ firstname) – Larpon

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