Mam funkcję isNotEmpty, która zwraca true, jeśli ciąg nie jest pusty, i false, jeśli ciąg jest pusty. Dowiedziałem się, że to nie działa, jeśli przepuszczę przez nią pusty ciąg.
function isNotEmpty($input)
{
$strTemp = $input;
$strTemp = trim($strTemp);
if(strTemp != '') //Also tried this "if(strlen($strTemp) > 0)"
{
return true;
}
return false;
}
Sprawdzanie poprawności ciągu przy użyciu isNotEmpty odbywa się:
if(isNotEmpty($userinput['phoneNumber']))
{
//validate the phone number
}
else
{
echo "Phone number not entered<br/>";
}
Jeśli łańcuch jest pusty, pozostałe nie wykonują się, nie rozumiem dlaczego. Czy ktoś mógłby rzucić nieco światła na ten temat?
php
string
validation
bgosalci
źródło
źródło
Odpowiedzi:
Właściwie prosty problem. Zmiana:
do
Prawdopodobnie możesz również zmienić to na:
ponieważ
!= ''
zwróci true, jeśli zdasz to 0 i kilka innych przypadków z powodu automatycznej konwersji typu PHP .Nie należy do tego używać wbudowanej funkcji empty () ; zobacz komentarze i tabele porównawcze typów PHP .
źródło
PHP ma wbudowaną funkcję o nazwie
empty()
test jest wykonywany przez wpisanieif(empty($string)){...}
odwołania php.net: php emptyźródło
Zawsze używam wyrażenia regularnego do sprawdzania pustego ciągu, pochodzącego z dni CGI / Perl, a także z Javascriptem, więc dlaczego nie z PHP, np. (Choć niesprawdzony)
Gdzie \ S oznacza dowolny znak inny niż biały
źródło
.
nie pasuje do nowych linii -[\s\S]
to hack wokół tego problemu. Jest to powszechne w JavaScript, ale w PHP możesz użyć/s
flagi, aby dopasować kropkę do wszystkich znaków. A stackoverflow.com/a/4544646/5411817 wspomina:(?s)
włączas
tryb i(?-s)
wyłącza, jeśli jest wyłączony. Po wyłączeniu następujące elementy.
nie będą pasować do nowej linii. jeśli chcesz włączyć / wyłączyć przełącznik inline (osadzony w wyrażeniu regularnym) zamiast jako flaga wyrażenia regularnego.W swojej
if
klauzuli w funkcji masz na myśli zmiennąstrTemp
, która nie istnieje.$strTemp
jednak istnieje.Ale PHP ma już
empty()
dostępną funkcję; po co tworzyć własne?Z php.net:
http://www.php.net/empty
źródło
PHP ocenia pusty ciąg znaków na false, więc możesz po prostu użyć:
źródło
Wystarczy użyć funkcji strlen ()
źródło
Php 5.3
funkcja wróci,5
jeśli$s
jest typuarray
.Php > 5.3
powstanie wyjątek. Polecam używaćis_string($s) && str_len($s) > 0
.>0
tylko do czytania.Po prostu piszę własną funkcję, is_string do sprawdzania typu i strlen do sprawdzania długości.
Oto mały testowy repl.it
EDYCJA: Możesz również użyć funkcji przycinania, aby sprawdzić, czy łańcuch jest również pusty.
źródło
Musiałem przetestować puste pole w PHP i użyć
który działał dobrze dla mnie.
źródło
Oto krótka metoda sprawdzenia, czy łańcuch jest pusty, czy nie.
źródło
strlen()
było zalecane w 2014 roku na tej stronie. Twoja odpowiedź nie wnosi żadnej nowej wartości.Możesz po prostu rzucić na bool, nie zapomnij obsługiwać zera.
źródło
(bool)$str
to to samo co robienie!empty($str)
i ma ten sam problem z'0'
. Przeczytaj PHP Booleans , rozdział „Konwersja na boolean”. Poza tym masz to odwrotnie - powinno być!(bool)$string'
. Lub twoja funkcja powinna mieć nazwę „isNotEmpty”. Niezależnie od tego, utkniesz w niewłaściwym traktowaniu „0”.0
problemu wystarczy poradzić sobie z tym przed zwróceniem rzutowanego łańcucha. I wielkie dzięki, zapomniałem negacji!
(zanegowane nazwy funkcji są złą praktyką). Edytowałem mój post.Wiem, że ten wątek był dość stary, ale chciałem po prostu udostępnić jedną z moich funkcji. Ta funkcja poniżej może sprawdzić puste ciągi, ciągi o maksymalnej długości, minimalnej długości lub dokładnej długości. Jeśli chcesz sprawdzić puste ciągi, po prostu ustaw $ min_len i $ max_len jako 0.
źródło
może możesz tego spróbować
wynika to z konfiguracji php w php.ini
źródło
jeśli masz pole, a mianowicie numer_seryjny i chcesz zaznaczyć puste
w ten sposób możesz sprawdzić wszystkie pola w pętli za pomocą innej pustej funkcji
źródło
empty()
był już polecany na tej stronie w 2009 roku.to krótkie i skuteczne rozwiązanie, dokładnie to, czego szukasz:
źródło
null
do pustego łańcucha w celu porównania. W takim przypadku, byłoby znacznie wyraźniej powiedzieć, co to znaczy:$input > ''
. Oznacza to, że „wykonaj leksykalne porównanie łańcucha wejściowego i łańcucha pustego”. Lub ignorować spacje na końcach:trim($input) > ''
.$input
będzie'0'
. Nie jest jasne, czy php robi anumeric
czylexical
porównanie, gdy pierwszy argument jest ciągiem liczbowym.Masz odpowiedź, ale w twoim przypadku możesz użyć
lub
źródło
empty("0")
empty
- ta odpowiedź została już udzielona, więc jej powtórzenie nic nie wnosi. Co gorsza, jak zostało to omówione w komentarzach, jest błędne - każda wartość równoważna0
zostanie uznana za „pustą”. 2.is_string
jest zły w inny sposób - pusty ciąg''
jest ciągiem, więc w takim przypadku zwróci true - nie robi tego, o co pyta pytanie.