Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    controllo su elemento array con espressione regolare

    Ho un array multidimensionale. Io vorrei scorrere i vari elementi (che sono anch'essi degli array) e controllare che il terzo elemento di questi sottoarray sia un numero tra 1 e 4 cifre.
    Il mio codice è questo ma non funziona e non riesco a capirne il motivo:
    codice:
    foreach($elenco_completo as $chiave => $iscritto) {
    	$pattern="\b\d{1,4}\b"; //SELEZIONA SOLO NUMERI DA 1 A 4 CIFRE
    	if(!preg_match($pattern,$iscritto[2])) { //CONTROLLA CHE IL TERZO ELEMENTO NON SIA UN NUMERO
    		$iscritto[]="nuovo elemento" //AGGIUNGE UN ELEMENTO PER VERIFICARE SE FUNZIONA
    	}	
    	$elenco_completo[$chiave] = $iscritto;
    }
    Il problema è che l'elemento nuovo viene aggiunto in ogni caso, anche se il terzo elemento non è un numero.

  2. #2
    Così mi sembra che funzioni ma non chiedermi come ci sono arrivato (con le espressioni regolari vado sempre a tentativi):

    $pattern="$\b\d{1,4}\b$";

    e poi, se ho capito bene qual è la tua esigenza, devi invertire il test:

    codice:
    if(preg_match($pattern,$iscritto[2])) {
    Però mi chiedo se non facevi prima così:

    codice:
    if (is_numeric($iscritto[2])) {
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  3. #3
    Innanzitutto ti mancano i delimitatori del pattern: un pattern perl compatible e' racchiuso da due caratteri (uguali o simmetrici) che lo delimitano. In genere si usano gli slash, ma la scelta e' ampia, quindi
    codice:
    $pattern="\b\d{1,4}\b"; // ERRATO
    codice:
    $pattern="/\b\d{1,4}\b/"; // CORRETTO
    In secondo luogo quel pattern non verifica che il valore contenga SOLO un numero tra 1 e 4 cifre, controlla che il valore CONTENGA un numero tra 1 e 4 cifre, infatti se inserisci il valore "testotestotestotesto 222" il controllo viene passato (perche' effettivamente un numero di 3 cifre c'e').

    Pattern corretto (con le ancore di inizio e fine stringa):
    codice:
    $pattern = "/^\d{1,4}$/";

  4. #4
    Grazie, la soluzione di k.b. mi funziona. Per la precisione è vero quello che dici, ma se volessi sapere se c'è SOLO il numero senza nient'altro non saprei come fare. Comunque ormai l'ho usata ed il mio scopo è stato raggiunto (che era quello di trasferire un elenco di dati da txt a mysql nel modo più automatizzato possibile).

  5. #5
    Se vuoi sapere se c'e' solo il numero e nient'altro, usi l'ultimo pattern che ti ho scritto

    Quel pattern cerca:
    - inizio stringa
    - un numero ripetuto da 1 a 4 volte
    - fine stringa

  6. #6
    A sì scusa, non l'avevo letto, grazie mille

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.