2012-02-19 46 views

Trả lời

68

Sử dụng preg_match().

if (!preg_match('/[^A-Za-z0-9]/', $string)) // '/[^a-z\d]/i' should also work. 
{ 
    // string contains only english letters & digits 
} 
+4

vâng. nó trông hiệu quả hơn. Để tìm ký tự đầu tiên không có trong phạm vi có vẻ hợp lý hơn quét toàn bộ chuỗi. –

+0

N. Tiếng Anh verison của liên kết ở trên đây: http://php.net/manual/en/function.preg-match.php –

+0

Ok, tôi đã cập nhật liên kết đến phiên bản tiếng anh. –

8

Bạn có thể sử dụng chức năng preg_match() chẳng hạn.

if (preg_match('/[^A-Za-z0-9]+/', $str)) 
{ 
    // ok... 
} 
5
if(preg_match('/[^A-Za-z0-9]+/', $str)) { 
    // ... 
} 
5

Có một cái nhìn tại shortcut này

if(!preg_match('/[^\W_ ] /',$string)) { 

} 

các class [^\W_] trận bất kỳ lá thư hoặc chữ số nhưng không nhấn mạnh. Và lưu ý biểu tượng !. Nó sẽ giúp bạn tiết kiệm từ quét toàn bộ đầu vào của người dùng.

22
if(ctype_alnum($string)) { 
    echo "String contains only letters and numbers."; 
} 
else { 
    echo "String doesn't contain only letters and numbers."; 
} 
+0

Không chắc chắn tại sao mọi người không bỏ phiếu chức năng ctype. Tôi không thể hình ảnh có một vấn đề hiệu suất với phạm vi của các chức năng ctype. –

+0

ctype_alnum là ngôn ngữ phụ thuộc để nó có thể không hoạt động như bạn muốn! – thethakuri

1

nếu bạn cần kiểm tra xem đó có phải là tiếng Anh hay không. bạn có thể sử dụng chức năng dưới đây. có thể giúp đỡ một ai đó ..

function is_english($str) 
{ 
    if (strlen($str) != strlen(utf8_decode($str))) { 
     return false; 
    } else { 
     return true; 
    } 
} 
0

PHP có thể so sánh một chuỗi với một biểu thức chính quy dùng preg_match(regex, string) như thế này:

if (!preg_match('/[^A-Za-z0-9]+/', $string)) { 
    // $string contains only English letters and digits 
} 
Các vấn đề liên quan