const regex = /maxiobe request response game/gm;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('maxiobe request response game', 'gm')
const str = `index.php:
<?php
// index.php – Aufgabe 3 (Bootstrap, Bereichsauswahl, Validierung, Versuchszähler)
declare(strict_types=1);
session_start();
/* ------------------ Helper ------------------ */
function h(string \$s): string { return htmlspecialchars(\$s, ENT_QUOTES, 'UTF-8'); }
function resetGame(): void {
unset(\$_SESSION['randomNumber'], \$_SESSION['tries'], \$_SESSION['min'], \$_SESSION['max'], \$_SESSION['guesses']);
}
/* ------------------ Init ------------------ */
\$alerts = []; // sammelt Bootstrap-Alerts [ ['type'=>'warning|danger|success|info','text'=>'...'] ]
if (!isset(\$_SESSION['tries'])) { \$_SESSION['tries'] = 0; }
if (!isset(\$_SESSION['guesses'])) { \$_SESSION['guesses'] = []; }
/* ------------------ Actions ------------------ */
if (\$_SERVER['REQUEST_METHOD'] === 'POST') {
// Exit / Neues Spiel
if (isset(\$_POST['exit'])) {
resetGame();
header('Location: ' . \$_SERVER['SCRIPT_NAME']);
exit();
}
// Start-Spiel mit Bereich (min/max)
if (isset(\$_POST['startgame'])) {
\$min = \$_POST['min'] ?? '1';
\$max = \$_POST['max'] ?? '10';
// Grundvalidierung: ganzzahlig
\$validInts = ctype_digit(strval(\$min)) && ctype_digit(strval(\$max));
if (!\$validInts) {
\$alerts[] = ['type'=>'danger','text'=>'Bitte nur ganze Zahlen für <b>Min</b> und <b>Max</b> verwenden.'];
} else {
\$min = (int)\$min;
\$max = (int)\$max;
// Logische Prüfungen
if (\$min < 0) { \$alerts[] = ['type'=>'warning','text'=>'Der Minimalwert darf nicht negativ sein.']; }
if (\$max <= \$min) { \$alerts[] = ['type'=>'warning','text'=>'<b>Max</b> muss größer als <b>Min</b> sein.']; }
if (\$max - \$min > 10000) { \$alerts[] = ['type'=>'warning','text'=>'Der Bereich ist zu groß. Wähle einen kleineren Abstand (max. 10.000).']; }
if (!\$alerts) {
\$_SESSION['min'] = \$min;
\$_SESSION['max'] = \$max;
\$_SESSION['randomNumber'] = rand(\$min, \$max);
\$_SESSION['tries'] = 0;
\$_SESSION['guesses'] = [];
\$alerts[] = ['type'=>'primary','text'=>"Spiel gestartet! Rate die Zahl zwischen <b>{\$min}</b> und <b>{\$max}</b>."];
}
}
}
// Rateversuch
if (isset(\$_POST['try']) && isset(\$_SESSION['randomNumber'])) {
\$raw = \$_POST['enteredNumber'] ?? '';
// Prüfung: Zahl eingegeben?
if (\$raw === '' || !preg_match('/^-?\\d+\$/', trim((string)\$raw))) {
\$alerts[] = ['type'=>'warning','text'=>'Bitte eine <b>ganze Zahl</b> eingeben.'];
} else {
\$guess = (int)\$raw;
\$min = \$_SESSION['min'] ?? 1;
\$max = \$_SESSION['max'] ?? 10;
// Bereichsprüfung
if (\$guess < \$min || \$guess > \$max) {
\$alerts[] = ['type'=>'warning','text'=>"Dein Tipp liegt <b>außerhalb</b> des Bereichs <b>{\$min}–{\$max}</b>."];
} else {
\$secret = (int)\$_SESSION['randomNumber'];
\$_SESSION['tries']++;
\$_SESSION['guesses'][] = \$guess;
if (\$guess === \$secret) {
\$t = (int)\$_SESSION['tries'];
\$alerts[] = ['type'=>'success','text'=>"Zahl erraten 🎉 – du brauchtest <b>{\$t}</b> Versuch" . (\$t === 1 ? '' : 'e') . "."];
// Nach Erfolg: Neues Spiel möglich (Reset-Button rendern), Zahl bleibt aber bis Exit,
// damit man die Success-Meldung sieht und "Neues Spiel" klicken kann.
// Alternativ direkt resetGame(); echo Link – aber wir bleiben konsistent mit Aufgabe 2.
} else {
\$hint = (\$guess > \$secret) ? 'zu hoch' : 'zu niedrig';
\$alerts[] = ['type'=>'danger','text'=>"Leider falsch – dein Tipp ist <b>{\$hint}</b>."];
}
}
}
}
}
/* ------------------ View (HTML) ------------------ */
?>
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Ratespiel – Aufgabe 3</title>
<link rel="stylesheet" href="assets/bootstrap/css/bootstrap.min.css">
</head>
<body>
<div class="container py-4">
<h1 class="mb-4">Ratespiel – Aufgabe 3</h1>
<?php foreach (\$alerts as \$a): ?>
<div class="alert alert-<?php echo h(\$a['type']); ?>" role="alert">
<?php echo \$a['text']; ?>
</div>
<?php endforeach; ?>
<?php if (isset(\$_SESSION['randomNumber'])): ?>
<!-- Laufendes Spiel -->
<div class="card mb-3">
<div class="card-body">
<h5 class="card-title">Dein Tipp</h5>
<form class="row g-3" action="<?php echo h(\$_SERVER['SCRIPT_NAME']); ?>" method="post" name="form">
<div class="col-sm-6 col-md-4">
<input class="form-control" type="number" name="enteredNumber"
placeholder="Zahl <?php echo (int)(\$_SESSION['min'] ?? 1); ?>–<?php echo (int)(\$_SESSION['max'] ?? 10); ?>"
min="<?php echo (int)(\$_SESSION['min'] ?? 1); ?>"
max="<?php echo (int)(\$_SESSION['max'] ?? 10); ?>">
</div>
<div class="col-auto">
<button class="btn btn-success" type="submit" name="try" value="1">Raten</button>
</div>
<div class="col-auto">
<button class="btn btn-outline-secondary" type="submit" name="exit" value="1">Neues Spiel</button>
</div>
</form>
<p class="mt-3 mb-0">
Bereich: <span class="badge bg-secondary">
<?php echo (int)(\$_SESSION['min'] ?? 1); ?>–<?php echo (int)(\$_SESSION['max'] ?? 10); ?>
</span>
|
Versuche: <span class="badge bg-info text-dark"><?php echo (int)\$_SESSION['tries']; ?></span>
</p>
<?php if (!empty(\$_SESSION['guesses'])): ?>
<p class="mt-2 mb-0">
Bisherige Tipps:
<?php foreach (\$_SESSION['guesses'] as \$g): ?>
<span class="badge bg-light text-dark"><?php echo (int)\$g; ?></span>
<?php endforeach; ?>
</p>
<?php endif; ?>
</div>
</div>
<?php if (!empty(\$alerts) && end(\$alerts)['type'] === 'success'): ?>
<!-- Bei Erfolg optional Hinweis-Card -->
<div class="alert alert-success" role="alert">
Glückwunsch! Du kannst oben auf <b>Neues Spiel</b> klicken, um erneut zu starten.
</div>
<?php endif; ?>
<?php else: ?>
<!-- Startseite mit Bereichsauswahl -->
<div class="card">
<div class="card-body">
<h5 class="card-title">Spiel starten</h5>
<form class="row g-3" action="<?php echo h(\$_SERVER['SCRIPT_NAME']); ?>" method="post" name="form">
<div class="col-sm-4 col-md-3">
<label class="form-label" for="min">Min</label>
<input class="form-control" type="number" id="min" name="min" value="1" min="0" step="1" required>
</div>
<div class="col-sm-4 col-md-3">
<label class="form-label" for="max">Max</label>
<input class="form-control" type="number" id="max" name="max" value="10" min="1" step="1" required>
</div>
<div class="col-12">
<button class="btn btn-primary" type="submit" name="startgame" value="1">Spielstart</button>
</div>
</form>
<p class="text-muted mt-2 mb-0">Tipp: Wähle z. B. 1–100 für mehr Herausforderung.</p>
</div>
</div>
<?php endif; ?>
</div>
<script src="assets/bootstrap/js/bootstrap.bundle.min.js"></script>
</body>
</html>
form try:
<?php
// form_try.part.php
?>
<form action="<?php echo htmlspecialchars(\$_SERVER['SCRIPT_NAME']); ?>" method="post" name="form">
<input type="text" name="enteredNumber" placeholder="Zahl zwischen 1 und 10" />
<input type="submit" value="Raten" name="try" />
<input type="submit" value="Exit" name="exit" />
</form>
form start:
<?php
// form_start.part.php
?>
<form action="<?php echo htmlspecialchars(\$_SERVER['SCRIPT_NAME']); ?>" method="post" name="form">
<input type="submit" value="Spielstart" name="startgame" />
</form>
`;
// Reset `lastIndex` if this regex is defined globally
// regex.lastIndex = 0;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for JavaScript, please visit: https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions