Visualizzazione risultati 1 fino 14 di 14

Discussione: Array con parole plurali

  1. #1
    Guest

    Predefinito Array con parole plurali

    Come vedi nell'array devo inserire parole singole e plurali, es. mela, mele, ecc., non c'è un modo per cambiare solo la parte finale della parola?

    Ho provato così ma non funziona:

    Codice PHP:
    $paroleNoGood = array ("mel(a|e)","per(a|e)","pesc(a|he)");

  2. #2
    Guest

    Predefinito

    quella sintassi è valida se il tuo successivo modo di ricercarle prevede l'uso di una regexp, altrimenti ti tocca scrivere entrambe le forme.

  3. #3
    Guest

    Predefinito

    Se non sappiamo cosa devi fare precisamente, come ti si può consigliare una soluzione?
    Così, senza niente, l'unico consiglio che mi viene è fare un array multidimensionale dove la chiave è la parola senza desinenza:

    Codice PHP:
    $paroleNoGood = array(
    'mel' => array('a', 'e'),
    'per' => array('a', 'e'),
    'bell' => array('a', 'o', 'e', 'i'),
    );

  4. #4
    Guest

    Predefinito

    Citazione Originalmente inviato da blackbos Visualizza messaggio
    quella sintassi è valida se il tuo successivo modo di ricercarle prevede l'uso di una regexp, altrimenti ti tocca scrivere entrambe le forme.
    Il successivo codice che le ricerca è questo, l'array si trova nel file include:

    Codice:
    <?php
    include ("parole-proibite.php");
    $stringaJs = implode("|",$paroleNoGood);
    ?>
    
    <script type="text/javascript">
    function xxxGuest1() {
    var modulo = document.forms.mioform;
    var parole = /\b(?:<?php echo $stringaJs; ?>)\b/i;
    var nomiCampi = ["nome","citta","email","messaggio"];
    for (idCampo = 0; idCampo < nomiCampi.length; idCampo++) {
    var campo = modulo.elements[nomiCampi[idCampo]];
    if (parole.test(campo.value)) {
    campo.style.backgroundColor = "red";
    alert("La parola \"" + campo.value.match(parole)[0] + "\" non è ammessa");
    campo.focus();
    return false
    }
     }
    return true; 
    }
    </script>

  5. #5
    Guest

    Predefinito

    Citazione Originalmente inviato da biccheddu Visualizza messaggio
    Se non sappiamo cosa devi fare precisamente, come ti si può consigliare una soluzione?
    Così, senza niente, l'unico consiglio che mi viene è fare un array multidimensionale dove la chiave è la parola senza desinenza:

    Codice PHP:
    $paroleNoGood = array(
    'mel' => array('a', 'e'),
    'per' => array('a', 'e'),
    'bell' => array('a', 'o', 'e', 'i'),
    );
    Ho provato il tuo codice, sai che non intercetta le parole?

  6. #6
    Guest

    Predefinito

    La logica mi pare buona, forse è la definizione della regexp che ha bisogno di un piccolo ritocco:
    Codice:
    var parole = /(<?php echo $stringaJs; ?>)/i;

  7. #7
    Guest

    Predefinito

    Nel primo post, non hai specificato cosa avresti dovuto fare: domanda generica => risposta generica.

    Comunque con lo snippet di blackbos dovresti risolvere.


  8. #8
    Guest

    Predefinito

    Citazione Originalmente inviato da blackbos Visualizza messaggio
    La logica mi pare buona, forse è la definizione della regexp che ha bisogno di un piccolo ritocco:
    Codice:
    var parole = /(<?php echo $stringaJs; ?>)/i;
    Ho messo questo, ma non le intercetta

  9. #9
    Guest

    Predefinito

    Ho fatto una prova, la regexp impostata in quel modo funziona e puoi vederlo anche tu con una paginetta come questa:

    Codice:
    <html>
    <body>
    
    <script type="text/javascript">
    
    function xxxGuest1()
    {
    	var parole = /(mel(a|e)|per(a|e))/i;
    	var campo = "Che buona questa pera!";
    	
    	if (parole.test(campo)) 
    	{
    		alert("La parola \"" + campo.match(parole)[0] + "\" non è ammessa");	
    	}
    	
    	return true; 
    }
    
    
    xxxGuest1();
    
    </script>
    </body>
    </html>

    Prova a fare un po di debug e capire se aggangia i riferimenti degli elementi di modulo che vuoi monitorare.

  10. #10
    Guest

    Predefinito

    Per me il problema è che non trova l'array scritto in questo modo così:

    Codice PHP:
    $paroleNoGood = array (
    "mel" => array("a", "e"),
    "per" => array("a", "e"),
    );
    mentre come il mio originale viene trovato

    Codice PHP:
    $paroleNoGood = array ("mela","pera","pesche");
    E questo, come ho postato prima, è tutto il codice di richiamo che ho:

    Codice:
    <?php
    include ("parole-proibite.php");
    $stringaJs = implode("|",$paroleNoGood);
    ?>
    
    <script type="text/javascript">
    function xxxGuest1() {
    var modulo = document.forms.mioform;
    var parole = /\b(?:<?php echo $stringaJs; ?>)\b/i;
    var nomiCampi = ["nome","citta","email","messaggio"];
    for (idCampo = 0; idCampo < nomiCampi.length; idCampo++) {
    var campo = modulo.elements[nomiCampi[idCampo]];
    if (parole.test(campo.value)) {
    campo.style.backgroundColor = "red";
    alert("La parola \"" + campo.value.match(parole)[0] + "\" non è ammessa");
    campo.focus();
    return false
    }
     }
    return true; 
    }
    </script>

  11. #11
    Guest

    Predefinito

    Pardon, devo essermi espresso male.

    L'array multidimensionale non ti serve per i fini del tuo script, cestinalo proprio e ragioniamo su quello iniziale, ovvero

    Codice PHP:
    $paroleNoGood = array ("mel(a|e)","per(a|e)","pesc(a|he)");

    Successivamente, prova a modificare quanto segue lato js:
    Codice:
    var parole = /(<?php echo $stringaJs; ?>)/i;

    Poi lancia lo script e vedi che succede ;-)

  12. #12
    Guest

    Predefinito

    Citazione Originalmente inviato da blackbos Visualizza messaggio
    Pardon, devo essermi espresso male.

    L'array multidimensionale non ti serve per i fini del tuo script, cestinalo proprio e ragioniamo su quello iniziale, ovvero

    Codice PHP:
    $paroleNoGood = array ("mel(a|e)","per(a|e)","pesc(a|he)");

    Successivamente, prova a modificare quanto segue lato js:
    Codice:
    var parole = /(<?php echo $stringaJs; ?>)/i;

    Poi lancia lo script e vedi che succede ;-)
    L'array risponde, i codici di richiamo funzionano tutti e 3 (li ho provati uno alla volta)

    - var parole = /\b(?:<?php echo $stringaJs; ?>)\b/i;
    - var parole = /\b(<?php echo $stringaJs; ?>)\b/i;
    - var parole = /(?:<?php echo $stringaJs; ?>)/i;


    Dimmi una cosa: a che servono il ? e : all' inizio

  13. #13
    Guest

    Predefinito

    In generale il ? indica che il metacarattere subito precedente è opzionale, del tipo che se faccio una regexp con https? il risultato sarà sia "http" che "https".

    Ma in quel contesto temo che il ? valga come carattere di ricerca, i due punti anche non dovrebbero avere un significato particolare se non quello di carattere in quel contesto.

    Per questo motivo ti sto suggerendo ancora di ometterli.

  14. #14
    Guest

    Predefinito

    Citazione Originalmente inviato da blackbos Visualizza messaggio
    In generale il ? indica che il metacarattere subito precedente è opzionale, del tipo che se faccio una regexp con https? il risultato sarà sia "http" che "https".

    Ma in quel contesto temo che il ? valga come carattere di ricerca, i due punti anche non dovrebbero avere un significato particolare se non quello di carattere in quel contesto.

    Per questo motivo ti sto suggerendo ancora di ometterli.
    Ok, bene li ho tolti, senti un ultimo favore: lo stesso codice lo voglio usare per intercettare URl che contengono le parola proibite, però io vorrei che mi stampi a video tutto l'url e non solo "Questo url non è ammesso"

    Vorrei una cosa del tipo "l'url www.parola-proibita.it non è ammesso"

    Questo è il codice che ho modificato:

    Codice:
    <script type="text/javascript">
    function xxxGuestUrl() {
    var modulo = document.forms.mioform;
    var parole = /\b(<?php echo $stringaJs; ?>)\b/i;
    var nomiCampi = ["url"];
    for (idCampo = 0; idCampo < nomiCampi.length; idCampo++) {
    var campo = modulo.elements[nomiCampi[idCampo]];
    if (parole.test(campo.value)) {
    campo.style.backgroundColor = "red";
    alert("Questo " + nomiCampi + " non è ammesso");
    campo.focus();
    return false
    }
     }
    return true; 
    }
    </script>

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •