Intercettare se parola nell'array è singolare o plurale

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
Questo è l'array

PHP:
<?php
$paroleArray = array ("mel(a|e)");

Questo il codice js che le intercetta correttamente, sa distinguere e mette a video se sing. o plur.

PHP:
<?php
include ("parole-proibite.php");
$paroleProibite = implode("|",$paroleArray);
?>

<script type="text/javascript">
function parolaNo(){ 
var modulo = document.forms.mioform1;
var parole = /\b(<?php echo $paroleProibite; ?>)\b/i; 
var nomiCampi = ["nome","citta","messaggio"];
for (idCampo = 0; idCampo < nomiCampi.length; idCampo++) {
var campo = modulo.elements[nomiCampi[idCampo]];
if (parole.test(campo.value)) {
campo.style.borderColor = 'black'
campo.style.backgroundColor = '#d8ecff'
document.getElementById(''+nomiCampi[idCampo]).innerHTML = "La parola \"" + campo.value.match(parole)[0] + "\" non è ammessa";
campo.focus();
return false;
}
else {
document.getElementById(''+nomiCampi[idCampo]).innerHTML = "";
} 
 }
return true; 
}
</script>

Questo il codice php che la trova ma non distingue cioè, a video scrive "La parola mel(a|e) non è ammessa"

PHP:
include("parole-proibite.php");

$stringa = $_POST['nome'].' '.$citta.' '.$messaggio; 
foreach($paroleArray as $parola) {
if (preg_match("/\b" . $parola . "\b/i", $stringa)) {
$errore .= "La parola $parola non è ammessa />";
 }
}
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
Qualcosa tipo:
PHP:
$arr=array("a"=>"e",... )
$str = "mele";
foreach ($arr as $sing=>$plur)
{
if (substr($str,-1) == $sing)
echo "$str è singolare. Plurale: ".substr($str,0,(strlen($str)-1)).$plur;
}

Ma come sistema di riconoscimento è un po' debole.
 

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
Qualcosa tipo:
PHP:
$arr=array("a"=>"e",... )
$str = "mele";
foreach ($arr as $sing=>$plur)
{
if (substr($str,-1) == $sing)
echo "$str è singolare. Plurale: ".substr($str,0,(strlen($str)-1)).$plur;
}

Ma come sistema di riconoscimento è un po' debole.

Non funziona, non elabora i dati.

La funzione parolaNo(), funziona sia su js e php, solo che js riconosce se singolare o plurale e mette a video esattamente come è stata inserita nel campo.

Php invece stampa mel(a|e)
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
Una funzione che ho realizzato sulla base della tua:
PHP:
function detectBadWords($text, array $badWords)
{
    $detected = array();

    foreach ($badWords as $badWord) {
        if (preg_match("/\b{$badWord}/i", $text, $matches)) {
            $detected[] = $matches[0];
        }
    }

    return $detected;
}
Passando il testo come primo parametro e le parole da rilevare come secondo parametro restituisce un array contenente le parole rilevate (o un array vuoto se non ce ne sono). Testata.
 

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
Una funzione che ho realizzato sulla base della tua:
PHP:
function detectBadWords($text, array $badWords)
{
    $detected = array();

    foreach ($badWords as $badWord) {
        if (preg_match("/\b{$badWord}/i", $text, $matches)) {
            $detected[] = $matches[0];
        }
    }

    return $detected;
}
Passando il testo come primo parametro e le parole da rilevare come secondo parametro restituisce un array contenente le parole rilevate (o un array vuoto se non ce ne sono). Testata.

In questo codice non ci sono i nomi dei campi, come fa a saperlo?
 

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
Lo devi passare tu come primo parametro:
PHP:
$words = array('mel(a|e)', 'cavalier(e|i)', 'cas(a|e)');

$detected = detectBadWords($_POST['nome'], $words);
// ...

Ho messo coi ma non va, sbaglio qualcosa? Cos'è quel $words?

PHP:
<?php
include ("parole-proibite.php");
$paroleProibite = implode("|",$paroleArray);
?>

function detectBadWords($text, array $paroleArray) { 
$stringa = detectBadWords($_POST['nome'], $words);  
$stringa = array(); 
foreach ($paroleArray as $parola) { 
if (preg_match("/\b{$parola}\b/i", $stringa)) { 
 $detected[] = $matches[0]; 
} 
 } 
return $detected; 
}
 
Ultima modifica:

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
Mi pare che tu non abbia una grande esperienza con PHP... Forse sarebbe meglio leggere una guida completa per capire i concetti di funzione, parametro e argomento. Comunque immagino che la versione giusta fosse questa:
PHP:
<?php
require_once 'parole-proibite.php';

$badWords = detectBadWords($_POST['nome'], $paroleArray);

if (!empty($badWords)) {
    die('Le seguenti parole sono proibite: ' . implode(', ', $badWords));
}
?>
 

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
Mi pare che tu non abbia una grande esperienza con PHP... Forse sarebbe meglio leggere una guida completa per capire i concetti di funzione, parametro e argomento. Comunque immagino che la versione giusta fosse questa:
PHP:
<?php
require_once 'parole-proibite.php';

$badWords = detectBadWords($_POST['nome'], $paroleArray);

if (!empty($badWords)) {
    die('Le seguenti parole sono proibite: ' . implode(', ', $badWords));
}
?>

Di base è come il mio, questo funziona, come ti dicevo, l'unico problema è che non riconosce se è singolare o plurale, lui vede che sta passando una parola che ho nell'array e mi stampa la parola come l'ho scritta io nell'array es. mel(a|e)

PHP:
$stringa = $_POST['nome'].' '.$citta.' '.$suoemail.' '.$messaggio;
foreach($paroleArray as $parola) {
if (preg_match("/\b" . $parola . "\b/i", $stringa)) {
$errore .= "La parola $parola non è ammessa";
 }
}
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
Se usi la funzione scritta da me, restituisce le parole trovate nel testo, quindi solo la versione singolare o solo quella plurale. Ti faccio un esempio:
PHP:
<?php
function detectBadWords($text, array $badWords)
{
    $detected = array();

    foreach ($badWords as $badWord) {
        if (preg_match("/\b{$badWord}/i", $text, $matches)) {
            $detected[] = $matches[0];
        }
    }

    return $detected;
}

$text = 'mela case';

print_r(detectBadWords($text, array('mel(a|e)', 'cas(a|e)')));
Risultato a video:
Codice:
Array
(
    [0] => mela
    [1] => case
)
Che, se non sbaglio, è quello che vuoi tu.
 

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
Qualcosa non mi quadra, ho inserito esattamente il tuo codice

PHP:
function detectBadWords($text, array $badWords) {
$detected = array();
foreach ($badWords as $badWord) {
if (preg_match("/\b{$badWord}/i", $text, $matches)) {
$detected[] = $matches[0];
}
}
return $detected;
}
$text = 'mela case';

print_r(detectBadWords($text, array('mel(a|e)', 'cas(a|e)')));

poi in un campo qualsiasi del mio form ho scritto mela e ha stampato Array ( [0] => mela [1] => case )

Poi ho scritto mele e ha stampato sempre Array ( [0] => mela [1] => case )

non ha riconosciuto la differenza
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
Il primo argomento è il testo da analizzare.
Il secondo argomento sono le parole da cercare.

Se vuoi cercare in $_POST['nome'], devi passare $_POST['nome'] come primo argomento.
Lo stesso vale per le stringhe statiche, ma dubito che a te servano.
 

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
Il primo argomento è il testo da analizzare.
Il secondo argomento sono le parole da cercare.

Se vuoi cercare in $_POST['nome'], devi passare $_POST['nome'] come primo argomento.
Lo stesso vale per le stringhe statiche, ma dubito che a te servano.

È molto simile al mio al quale ci manca qualcosa, sto tentando di modificarlo come il tuo ma è triste...

PHP:
$stringa = $_POST['nome'].' '.$citta.' '.$messaggio; 
foreach($paroleArray as $parola) {
if (preg_match("/\b" . $parola . "\b/i", $stringa)) {
$errore .= "La parola $parola non è ammessa />";
 }
}
 

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
PHP:
if (preg_match("/\b" . $parola . "\b/i", $stringa), $matches) {
    $errore .= "La parola $matches[0] non è ammessa />";
}

Non va, ha dell'incredibile

PHP:
$stringa = $_POST['nome'].' '.$citta.' '.$messaggio;  
foreach($paroleArray as $parola) { 
if (preg_match("/\b" . $parola . "\b/i", $stringa), $matches) {
$errore .= "La parola $matches[0] non è ammessa />"; 
 } 
}
 

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
Io qui non riesco a venirne fuori

PHP:
$stringa = $_POST['nome'].' '.$citta.' '.$messaggio;
foreach($paroleArray as $parola) {
if (preg_match("/\b" .$parola ."\b/i", $stringa, $matches)) { 
$stringa[] = $matches[0];
$errore .= "La parola $matches[0] non è ammessa />";  
  }
 }
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
Sì, avevo sbagliato io all'inizio una parentesi:
PHP:
$stringa = $_POST['nome'] . ' ' . $citta . ' ' . $messaggio;

foreach($paroleArray as $parola) { 
    if (preg_match("/\b" . $parola . "\b/i", $stringa, $matches) {
        $errore .= "La parola $matches[0] non è ammessa />"; 
    } 
}
P.S. Ma perché c'è /> dopo "ammessa"?
 

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
Sì, avevo sbagliato io all'inizio una parentesi:
PHP:
$stringa = $_POST['nome'] . ' ' . $citta . ' ' . $messaggio;

foreach($paroleArray as $parola) { 
    if (preg_match("/\b" . $parola . "\b/i", $stringa, $matches) {
        $errore .= "La parola $matches[0] non è ammessa />"; 
    } 
}
P.S. Ma perché c'è /> dopo "ammessa"?

Quel /> non c'entrava, l'ho tolto.

Ora sembra funzionare, si tratta di togliere il tuo array e fargli leggere il mio che si chiama $paroleArray

e poi sostituire il tuo print_r() con il mio echo e cioè $errore .=...


PHP:
function detectBadWords($stringa, array $badWords) {
$stringa = $_POST['nome'].' '.$citta.' '.$messaggio;
$detected = array();
foreach ($badWords as $badWord) {
if (preg_match("/\b{$badWord}/i", $stringa, $matches)) {
$detected[] = $matches[0];
}
}
return $detected;
}

print_r(detectBadWords($stringa, array('mel(a|e)', 'cas(a|e)')));
 
Discussioni simili
Autore Titolo Forum Risposte Data
nivaria.achinet Intercettare form solo dopo invio Javascript 1
P [PHP] Intercettare ed aggiornare campi di un database PHP 5
A [Javascript] intercettare errori JS Javascript 1
G [Javascript] Intercettare cambio applicazione Javascript 0
L Come intercettare un DataPicker? Javascript 0
X Intercettare cambio valore radio jQuery 1
Shyson Intercettare array ip e spider PHP 22
Shyson Intercettare url nell'array e traformarlo con str_ireplace PHP 0
G Intercettare le righe di una tabella taggate con "id" Javascript 2
P intercettare JSON array vuoto PHP 0
M intercettare ultimo carattere stringa con PHP PHP 5
Shyson Regex che trova la parola nella pagina jQuery 6
F Funzione Glob - ricerca file contenente una parola PHP 1
Cosina Cerca parola Javascript 13
filomeni Posizionato con una sola parola SEO e Posizionamento 5
C [PHP] Trovare se la parola è presente in una pagina PHP 1
T [VENDO] Articolista serio e motivato per 0.005€ a parola Offerte e Richieste di Lavoro e/o Collaborazione 1
romeocharly link su parola HTML e CSS 3
T Blog su Altervista e Titolo: come rimuovere la parola "Altervista" dalle SERP? SEO e Posizionamento 2
asevenx verificare presenza parola lunga all'interno di un testo PHP 1
S Il campo restituisce ???? e nn la parola in russo MySQL 5
R Ordinare alfabeticamente partendo da una PAROLA MySQL 0
F Parola chiave posizionata su Google Maps è posizionamento? SEO e Posizionamento 10
K ricerca parola in stringa Javascript 4
max_400 cercare una parola in una stringa PHP 5
M Script tutte le combinazioni maiuscole e minuscole di una parola PHP 5
A Aggiungere tag nel DOM a parola/e selezionata/e nel output Javascript 15
C Iniziali di una parola PHP 4
F Applicare uno stile css ad una sola parola HTML e CSS 5
S leggere da file e scrivere su file un carattere o una parola alla volta Visual Basic 1
M Chat con permesso di parola Javascript 0
R Area di testo: creare un collegamento esterno selezionando un parola. HTML e CSS 2
M Problemi di ricerca con parola chiave particolare SEO e Posizionamento 2
M parser: selezionare parola esatta PHP 2
T Estrarre una parola da un campo. Classic ASP 1
rok Inserire link ad una parola in un animazione flash (finestra full screen) Flash 1
R estrarre le prime 3 lettere di una parola Classic ASP 19
jan267 Ottenere la prima lettera di una parola in grassetto Snippet PHP 0
peppoweb Palladium: tutto sotto controllo, parola di Bill Gates Discussioni Varie 0
P Errore nell'indirizzo degli elementi HTML e CSS 2
FDF182 file .bin nell' email PHP 0
G [MS Access] Funzione ARROTONDA non definita nell'espressione MS Access 1
C [Photoshop] bordi tondi come posso fare per ottenerli come nell'immagine allegata Photoshop 2
M [PHP] Visualizzare nell'alert il calcolo PHP 4
C [Javascript] problema nell'utilizzo di un array Javascript 2
felino [Pinnacle 21] Lentezza nell'esportazione in DVD Windows e Software 10
L Mi trovo nell'impossibilità di eliminare un record nella tabella Database 1
D [Javascript] Script che controlla quello che hai scritto nell'input Javascript 3
giancadeejay [PHP] Nome utente e Logout nell'header PHP 0
C [MySQL] errore nell'importazione tabella con file csv MySQL 0

Discussioni simili