2010-02-09 58 views
11

Có vấn đề với điều này.Xác định xem ký tự có phải là chữ cái không

Giả sử tôi có thông số bao gồm một ký tự đơn và tôi chỉ muốn chấp nhận các ký tự chữ cái. Làm cách nào để xác định thông số được chuyển là thành viên của bảng chữ cái latin (a - z)?

Bằng cách Im sử dụng PHP Kohana 3.

Cảm ơn.

+0

Hãy làm rõ câu hỏi: * bảng chữ cái * là gì? Có lẽ bạn có nghĩa là một ký tự chữ cái? Hoặc một ký tự chữ và số? – wallyk

+0

Ồ, được rồi, tôi sẽ được sửa chữa. Chữ cái phải là thuật ngữ thích hợp. Cảm ơn. –

Trả lời

12

Sử dụng mệnh đề bảo vệ sau ở phía trên cùng của phương pháp của bạn:

if (!preg_match("/^[a-z]$/", $param)) { 
    // throw an Exception... 
} 

Nếu bạn muốn cho phép chữ cái viết hoa quá, thay đổi biểu thức chính quy cho phù hợp:

if (!preg_match("/^[a-zA-Z]$/", $param)) { 
    // throw an Exception... 
} 

Một cách khác để hỗ trợ không phân biệt chữ hoa chữ thường là sử dụng công cụ sửa đổi không mô phỏng trường hợp /i:

if (!preg_match("/^[a-z]$/i", $param)) { 
    // throw an Exception... 
} 
+0

preg_match ("/^[a-z] $/i", $ param) hoặc sử dụng phân biệt chữ hoa chữ thường – Xorlev

+0

Nhận xét của bạn bị ngược. Nếu preg_match thành công trong việc khớp [a-z], thì bạn không nên ném ngoại lệ. if (! preg_match (...)) {exception! } –

+0

@Nick Presta: Tốt bắt. Tôi đã thêm một '!' Vào các điều kiện. Cảm ơn :) – Asaph

0

Bạn có thể thử:

preg_match('/^[a-zA-Z]$/',$input_char); 

Giá trị trả về của hàm trên là đúng nếu $ input_char chứa một bảng chữ cái đơn, nếu không thì nó sai. Bạn có thể sử dụng giá trị trả về một cách phù hợp.

2
preg_match('/^[a-zA-Z]$/', $var_vhar); 

Phương sẽ trở lại giá trị int: cho không phù hợp trả về 0 và cho trận đấu trở lại 1.

+1

Regex là tốt, nhưng nhiều lần bạn sử dụng một, ngay cả khi tầm thường, bạn phát minh lại bánh xe và giới thiệu bề mặt tiếp xúc cho lỗi. Tôi thích php.net/manual/en/book.ctype.php –

+0

[AZ is passé.] (Http://stackoverflow.com/questions/4955086/sort-upper-case-just-before-lowercase-key -values-from-a-hash/4958634 # 4958634) – tchrist

18

http://php.net/manual/en/function.ctype-alpha.php

<?php 
    $ch = 'a'; 
    if (ctype_alpha($ch)) { 
     // Accept 
    } else { 
     // Reject 
    } 

này cũng mất locale vào tài khoản nếu bạn đặt nó một cách chính xác.

EDIT: Để hoàn tất, các áp phích khác ở đây dường như nghĩ rằng bạn cần đảm bảo tham số là một ký tự đơn, nếu không tham số không hợp lệ. Để kiểm tra độ dài của một chuỗi, bạn có thể sử dụng strlen(). Nếu strlen() trả về mọi số không phải 1, thì bạn cũng có thể từ chối tham số.

Khi nó đứng, câu hỏi của bạn tại thời điểm trả lời, truyền tải rằng bạn có một tham số ký tự đơn lẻ ở đâu đó và bạn muốn kiểm tra xem đó có phải là chữ cái hay không. Tôi đã cung cấp một giải pháp mục đích chung mà thực hiện điều này, và là địa phương thân thiện quá.

+0

Nhưng nếu '$ ch' dài hơn một ký tự thì sao? – Asaph

+1

Từ hướng dẫn sử dụng: _Checks nếu tất cả các ký tự trong chuỗi, văn bản được cung cấp là alphabetic_ ctype_alpha() chấp nhận một chuỗi. –

+0

Tôi biết những gì 'ctype_alpha()' nào. OP muốn từ chối tất cả đầu vào dài hơn một ký tự và giải pháp của bạn không làm điều đó. – Asaph

0

Tôi muốn sử dụng ctype, vì Nick đề xuất, vì nó không chỉ nhanh hơn regex, thậm chí nó còn nhanh hơn hầu hết các hàm chuỗi được xây dựng trong PHP. Nhưng bạn cũng cần đảm bảo đó là một ký tự đơn:

if (ctype_alpha($ch) && strlen($ch) == 1) { 
    // Accept 
} else { 
    // Reject 
} 
+0

Không, bạn không. ctype_alpha kiểm tra toàn bộ chuỗi. Xem hướng dẫn sử dụng. –

+1

Tôi biết điều đó. Nhưng anh ta chỉ muốn tham số là một nhân vật duy nhất. Vì vậy, nếu chuỗi là 'AB' nó sẽ bị từ chối, bất kể cả hai đều được kiểm tra với' ctype_alpha'. Xem câu hỏi. – Anthony

+0

Có lẽ _you_ sẽ thấy câu hỏi. OP nói rằng anh * đã * có một tham số ký tự đơn. Anh ấy muốn kiểm tra xem thông số đó có phải là chữ cái hay không. Kiểm tra độ dài của tham số là trách nhiệm của người gọi hoặc ít nhất không được xử lý ở đây vì OP không bao giờ yêu cầu điều này và không liên quan gì đến câu hỏi, "Xác định xem ký tự có phải là chữ cái" hay không. –

1

Bạn không thể sử dụng [a-zA-Z] cho Unicode.

đây là những ví dụ làm việc với Unicode,

if (preg_match('/^\p{L}+$/u', 'my text')) { 
    echo 'match'; 
} else { 
    echo 'not match'; 
} 
0

Điều này sẽ giúp hy vọng.Đây là một chức năng đơn giản trong php được gọi là ctype_alpha

$mystring = 'a' 
if (ctype_alpha($mystring)) 
{ 
    //Then do the code here. 
} 
+1

Chỉ để tham khảo trong tương lai; đã có hai câu trả lời ở đây đã cung cấp thông tin về cách sử dụng 'ctype_alpha', mỗi bài đăng được đăng hơn 4 năm trước. Những câu trả lời này cũng bao gồm nhiều giải thích hơn, và tích hợp mẫu vào những gì mã OP đang làm. Nói chung, bạn chỉ nên thêm câu trả lời cho một câu hỏi rất cũ như thế này nếu bạn có nội dung cần thêm. –

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