Bir karakter alfabetik olup olmadığını belirlemek

6 Cevap php

Bu sorunlar mı yaşıyorsunuz.

Diyelim ki tek bir karakter oluşan bir parametre var ve ben sadece alfabetik karakterler kabul etmek istiyorum diyelim. Nasıl geçti parametre latin alfabesinin bir üyesi olduğunu belirler (a - z)?

Arada Im PHP Kohana 3 ile.

Teşekkürler.

6 Cevap

Hakkında yöntem en az aşağıdaki koruma maddesini kullanın:

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

Çok büyük harf izin vermek istiyorsanız, buna göre düzenli ifade değiştirin:

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

Vaka duyarsız desteklemek için başka bir yol /i durum anlayışsızlık değiştirici kullanmak için:

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

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

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

Eğer doğru ayarlarsanız, bu da dikkate yerel alır.

EDIT: tam olması için, burada diğer posterler Eğer parametre tek bir karakter, ya da başka bir parametre geçersiz olmasını sağlamak gerektiğini düşünüyor. Bir dize uzunluğunu kontrol etmek için kullanabileceğiniz strlen(). strlen() olmayan 1 numara dönerse, o zaman da, parametre reddedebilirsiniz.

Haliyle, cevaplama sırasında soru, bir yerde bir tek karakter parametre var ve bunu alfabetik olup olmadığını kontrol etmek istediğiniz aktarıyor. Ben bunu yapan bir genel amaçlı çözüm sağladı, ve çok yerel dostu var.

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

Yöntem int değeri dönecektir: hayır maç 0 döndürür ve maçlar için 1 döndürür için.

Sen deneyebilirsiniz:

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

$ Input_char tek bir alfabe içeriyorsa Yukarıdaki işlevin dönüş değeri başka yanlıştır, doğrudur. Size uygun dönüş değeri yararlanabilirler.

Nick önerilen değil sadece regex daha hızlıdır çünkü ben, ctype kullanmak istiyorum, hatta daha hızlı PHP yerleşik string fonksiyonları en fazla. Ama aynı zamanda tek bir karakter olduğundan emin olmak gerekir:

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

Unicode için [a-Za-z] kullanamazsınız.

Burada örnek, Unicode ile çalışıyoruz

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