Skocz do zawartości

Rekomendowane odpowiedzi

Opublikowano

Witam,

Ostatnio zauważyłem u siebie na stronie pewną tendencję do nadużywania wulgaryzmów, a ostrzeżenia i bany nie pomagają. Wiem, że słabym punktem forum jest właśnie rozmowa na IP.Shoutbox. Skoro nie chcą po dobroci i robią afery, stwierdziłem z kolegami, że zaczniemy karać ich wyłączaniem SB dla X poziomu ostrzeżeń. Oczywiście to wykonałem na "prowizorkę", ponieważ nie bawię się tym projektem, a jedynie mogę podesłać ewentualne kody, aby zaimplementowali to w nowych wersjach.

Do czego zmierzam? Chcę poprawić komendę banowania na zasadzie:

/ban Largo 24 D

Co to ten zapis by oznaczał? Pierwszy parametr to komenda, drugi to imię delikwenta, a następna dwa są opcjonalne. Trzeci miałby odpowiadać za jednostkę czasu, a czwarty za typ tej jednostki. Logicznym jest, że nie trzeba by podawać czwartego parametru, a standardową wartością byłyby minuty ( M ). Próbowałem stworzyć wyrażenie regularne, ale ono raczej nie spełni swojej roli, w każdym bądź razie nie wiem jak w wyrażeniach operować na zasadzie warunku istnienie. Może Ty DawPi, miałbyś pomysł na wykonanie takiej modyfikacji? Ja mogę siąść przy tym i podziałać, ale są pewne problemy, wypiszę je poniżej.

  • Jeżeli administrator forum nie dodaj TYLKO alfanumerycznych znaków to leżymy - spacja jest separatorem, można dodać inny, ale to wszystko zależy od decyzji użytkownika.
  • Jak stworzyć konstrukcję warunkową w wyrażeniu? Możliwe, że trzeba to wykonać, ale nie na zasadzie wyrażenia?

Czekam na propozycje, ja się podejmę próby wykonania tego.

Pozdrawiam,

Largo

Jeżeli Ci pomogłem, nie zapomnij proszę o kliknięciu - add.png

Możesz liczyć na moją pomoc z zakresu: PHP5, MySQL, JavaScript i Ajax | W trakcie nauki CSS i xHTML!

W sprawie pomocy z zakresu IP.Board służę pomocą w dziale Zaawansowane programowanie IP.Board

Proszę o nie wysyłanie próśb PW o prywatną pomoc - pomagam JEDYNIE na forum lub na zlecenie!

  • Manager
Opublikowano

Hej,

rozumiem, co masz na myśli.

A co powiesz, że zamiast wyrażeń regularnych po prostu explodujesz to do tablicy? :) Znacznie szybciej, prościej i skuteczniej. Potem wystarczy numerycznymi indeksami odwołać się do wartości.

$tab = explode(' ', $shout );

$tab[0] = str_replace('/', '', $tab[0] );
$tab[1] = 'Largo';
$tab[2] = 24;
$tab[3] = 'D';

I gotowe! :)

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Opublikowano (edytowane)

Hej,

rozumiem, co masz na myśli.

A co powiesz, że zamiast wyrażeń regularnych po prostu explodujesz to do tablicy? :) Znacznie szybciej, prościej i skuteczniej. Potem wystarczy numerycznymi indeksami odwołać się do wartości.

$tab = explode(' ', $shout );

$tab[0] = str_replace('/', '', $tab[0] );
$tab[1] = 'Largo';
$tab[2] = 24;
$tab[3] = 'D';

I gotowe! :)

Witaj,

Tak, pomyślałem o tym, ale fakt, że chcę kod podesłać teraByte sprawia, abym go dobrze przemyślał. A co, jeżeli administrator umożliwi korzystanie z Display Names i na dodatek nie ustawi ograniczeń na: a-zA-Z0-9? Wtedy będzie kicha, bo podzielimy imię na 2 części i nawet użytkownika nie znajdzie :-) Właśnie nie wiem jak do tego problemu podejść, czy dać schemat taki jak ma Manual PHP?

/ban Largo [ 24, M ]

Szkoda, że nowy IP.Shoutbox nie korzysta z parametrów, ogólnie ta konstrukcja komend jest dosyć "mało" przemyślana... Nie wiem, Twój sposób wydaje się logiczny i prosty, ale czy dla wszystkich przypadków aktualny? Zastanówmy się nad tym chwilkę, a może coś wymyślimy :-)

Pozdrawiam,

Largo

Edytowane przez Largo

Jeżeli Ci pomogłem, nie zapomnij proszę o kliknięciu - add.png

Możesz liczyć na moją pomoc z zakresu: PHP5, MySQL, JavaScript i Ajax | W trakcie nauki CSS i xHTML!

W sprawie pomocy z zakresu IP.Board służę pomocą w dziale Zaawansowane programowanie IP.Board

Proszę o nie wysyłanie próśb PW o prywatną pomoc - pomagam JEDYNIE na forum lub na zlecenie!

Opublikowano (edytowane)

/ban Largo 24-M

Lepiej? ;]

<?php

$results = array( 'is_command' 		=> 0,
			 'is_name'	 		=> 0,
			 'input_name' 		=> '',
			 'is_time'	 		=> 0,
			 'is_unit_time'	=> 0,
			 'input_unit_time' => '',
			 'input_time'		=> '' );

$lang	= array( 'is_command'		=> 'Czy jest komenda?',
			 'is_name'			=> 'Czy wpisane zostalo imie',
			 'input_name'		=> 'Imie to: ',
			 'is_time'			=> 'Czy wpisany zostal czas?',
			 'is_unit_time'	=> 'Czy wpisana zostala jednostka czasu?',
			 'input_unit_time' => 'Jednostka czasu to: ',
			 'input_time'		=> 'Czas to: ' );

if( $_POST['submit'] )
{
if( $_POST['regex'] )
{
	if( preg_match( "/^(\/[a-z]+)\s([a-zA-Z0-9\D]+)(?:\s([0-9]+))(?:\s(M|H|D))?$/", $_POST['regex'], $match ) )
	{
		$results['is_command'] = 1;

		/* Name? */
		if( $match[2] )
		{
			$results['is_name'] = 1;
			$results['input_name'] = $match[2];
		}

		/* Is time? */
		if( $match[3] )
		{
			$results['is_time'] = 1;

			/* Unit time set? */
			if( $match[4] )
			{
				$results['is_unit_time'] = 1;
				$results['input_unit_time'] = $match[4];
			}
			else
			{
				$results['input_unit_time'] = 'M';
			}

			/* Set time! */
			$results['input_time'] = $match[3].$results['input_unit_time'];
		}
	}
}
}

?>

<!DOCTYPE html>
<meta charset="UTF-8">
<title>Testowanie wyrazen regularnych</title>
<form method="post" action="test.php">
<fieldset>
<legend>Obsluga komend</legend>
<label>Wpisz komende:
	<input type="text" name="regex" value="/ban Largo Winch 24 H">
</label>
<input type="submit" name="submit">
</fieldset>
<? if( $results ) { ?>
<fieldset>
 <legend>Wynik</legend>
	 <ul>
	 <?
	 	foreach( $results AS $k => $v )
		{
			echo "<li><label>{$lang[ $k ]}</label><br />";

			if( is_numeric( $v ) )
			{
				if( $v )
				{
					echo "<span style='color: green; font-weight: bold'>Tak</span>";
				}
				else
				{
					echo "<span style='color: red; font-weight: bold'>Nie</span>";
				}
			}
			else
			{
				if( strlen( $v ) )
				{
					echo "<span style='color: blue; font-weight: bold'>{$v}</span>";
				}
				else
				{
					echo 'Nie podano informacji!';
				}
			}

			echo '</li>';
		}
	 ?>
	 </ul> 
 </fieldset>
<? } ?>
</form>

Przetestuj to, a drugi fakt, to można by nazwy dwuczłonowe zamykać w ' '? Wtedy nie byłoby problemu ze znakami specjalnymi na forach.

PS. Kod został poprawiony i wszystko działa. Można podsunąć pomysł teraByte :-)

Pozdrawiam,

Largo

Edytowane przez Largo

Jeżeli Ci pomogłem, nie zapomnij proszę o kliknięciu - add.png

Możesz liczyć na moją pomoc z zakresu: PHP5, MySQL, JavaScript i Ajax | W trakcie nauki CSS i xHTML!

W sprawie pomocy z zakresu IP.Board służę pomocą w dziale Zaawansowane programowanie IP.Board

Proszę o nie wysyłanie próśb PW o prywatną pomoc - pomagam JEDYNIE na forum lub na zlecenie!

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.