2012-04-22 4 views
5

Ich weiß, dass es die Funktion ctype_alpha gibt, obwohl diese FALSE zurückgibt, wenn die Zeichenfolge Leerzeichen (Leerzeichen) enthält.Wie kann man eine rein alphabetische Zeichenfolge mit Leerzeichen in PHP validieren?

Wie erlaube ich Buchstaben und Leerzeichen, aber sonst nichts?

+0

Leerzeichen vor der Überprüfung durch eine Zahl ersetzen? – DanRedux

+0

@DanRedux das funktioniert nur, wenn die Zeichenfolge zuvor keine Zahlen enthält. –

+0

Warum? Wenn es vorher Zahlen enthält, gibt es false korrekt zurück. Wenn es Zahlen nach enthält, gibt es false korrekt zurück. Das einzige, was es tun wird, ist, Räume als schlechte Token zu behandeln, indem man sie in schlechte Token verwandelt. – DanRedux

Antwort

5
$is_alpha_space = ctype_alpha(str_replace(' ', '', $input))); 
wünschen

oder

$is_alpha_space = preg_match('/^[a-z\s]*$/i', $input); 
+0

Vielen Dank. Ich mag den ersten. Ich frage mich nur zum Lernen, woher weißt du das erste? Weil ich nicht einmal an der Dokumentation erkennen kann. – Carpet

+0

Es ist nicht eine Funktion. Es verwendet 'str_replace()', um Leerzeichen zu entfernen, und dann 'ctype_alpha()', um zu überprüfen, ob das Ergebnis alphabetisch ist. – dtbarne

+0

Ich verstehe, obwohl, woher wissen Sie es, wenn die ctype Seite in der Dokumentation nicht darauf hinweist (dass Sie das tun können), oder tut es? Ich kann es nicht sagen. – Carpet

2
if (preg_match("^/[a-zA-Z ]+$/", $input)) { 
    // input matches 
} 

Demo: http://ideone.com/jp6Wi
Docs: http://php.net/manual/en/function.preg-match.php

+0

Beachten Sie jedoch, dass '[az]' [je nach den Gebietsschemaeinstellungen des Systems unterschiedliche Zeichen verwenden kann] (http://stackoverflow.com/questions/1930487/will-az-ever-match-accented-characters-in) -preg-pcre). –

+0

Es gibt einen Tippfehler in der Regex. Es sollte mit '/ ^' anstatt mit '^ /' beginnen. – toxalot

+0

Beachten Sie, dass dieser reguläre Ausdruck eine Zeichenfolge mit Leerzeichen erlaubt. Das kann oder kann nicht das gewünschte Ergebnis sein. – toxalot

0

ctype_alpha(preg_replace('/\s/', '', $mystring))

Der innere Ausdruck gibt die Zeichenfolge ohne Leerzeichen, und Sie dann verwenden ctype_alpha`` wie Sie

+0

Dies fällt unter die Kategorie ** Wenn Sie keine ausgefallenen Ersetzungsregeln benötigen, sollten Sie immer 'str_replace' anstelle von' preg_replace' verwenden. ** – toxalot

0

Entfernen der Leerzeichen ist der Weg zu gehen, aber denken Sie daran, ctype_alpha führt in diesen Tagen zu einem falschen auf einem leeren String! Unterhalb der Methode, die ich verwende ...

function validateAlpha($valueToValidate, $spaceAllowed = false) { 
    if ($spaceAllowed) { 
     $valueToValidate = str_replace(' ', '', $valueToValidate); 
    } 
    if (strlen($valueToValidate) == 0) { 
     return true; 
    } 
    return ctype_alpha($valueToValidate); 
} 
Verwandte Themen