You want to match and replace patterns in a value.
Use preg_replace().
<html>
<head>
<title>PHP</title>
<meta Name="Author" Content="Hann So">
</head>
<body>
<p>
<?php
if (isset($_POST['submit'])) {
process_form();
}
else {
display_form();// display form for the first time
}
function display_form() {
echo <<<HTML
<form action = "$_SERVER[SCRIPT_NAME]" method="post">
Regular Expression Pattern (include the delimiter):<br />
<input type="text" name="pattern" size="70"
value="/\b[\w.-]+@[\w.-]+\.[A-Za-z]{2,6}\b/" /><br />
<font color="blue">(use \b for word boundaries
because the email can be within a text.)</font>
<br />
Replacement:<br />
<input type="text" name="replace" size="70" value="<a href='mailto:$0'>$0</a>" /><br />
<font color="blue">($0 refers to the entire match.)</font><br />
Text:<br />
<textarea name="text" rows="5" cols="50">
Contact me at hann@mail.com
</textarea><br />
<input type="submit" name="submit" value="Check" />
</form>
<table border>
<tr bgcolor="lightcyan">
<th align="left">Type of Input</th>
<th align="left">Regular Expression</th>
</tr>
<tr>
<td>Zip Code</td>
<td><b>/^(\d{5})(-\d{4})?$/</b>
<br />(^(\d{5}) starts with 5 digits, (-\d{4})?$ means dash with 4 digits at the end.
? means 0 or 1 as zip code can have 5 or 9 digits (last 4 are optional))
<br />or<br />
<b>/^\d{5}((-|\s)?\d{4})?$/</b>
</td>
</tr>
<tr bgcolor="lightyellow">
<td>E-mail</td>
<td><b>/^[\w.-]+@[\w.-]+\.[A-Za-z]{2,6}$/</b>
<br />(^[\w.-]+ starts with 1 or more letters, numbers, underscore, period and a dash.
\.[A-Za-z]{2,6} ends with one period and between 2 and 6 letters to account for .com, .travel, etc.)
<br />or<br />
<b>/^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,6})$/</b>
</td>
</tr>
<tr>
<td>U.S. phone number</td>
<td><b>/^\(?\d{3}\)?-?\s*\d{3}\s*-?\d{4}$/</b>
</td>
</tr>
<tr bgcolor="lightyellow">
<td>Credit card number</td>
<td><b>/^((4\d{3})|(5[1-5]\d{2})|(6011))-?\d{4}-?\d{4}-?\d{4}|3[4,7]\d{13}$/</b>
</td>
</tr>
<tr>
<td>Social Security number</td>
<td><b>/^\d{3}-?\d\d-?\d{4}$/</b>
</td>
</tr>
<tr bgcolor="lightyellow">
<td>URL</td>
<td><b>/^((http\https|ftp)://)?([\w-])+(\.)(\w){2,4}([\w/+=%&_.~?-]*)$/</b>
</td>
</tr>
</table>
HTML;
}
function process_form() {
// stripslashes and trim the strings
$pattern = stripslashes(trim($_POST['pattern']));
$replace = stripslashes(trim($_POST['replace']));
$replace2 = htmlentities(stripslashes(trim($_POST['replace'])));
$text = trim($_POST['text']);
echo "The result of replacing <br /><font color=red>$pattern</font><br />
with<br /><font color=red>$replace2</font><br />
in<br /><font color=red>$text</font><br /> is:<br />";
// match the pattern first before doing the replacement
if (preg_match($pattern, $text)) {
echo preg_replace($pattern, $replace, $text), "<br />";
}
else {
echo "$pattern was not matched. <br />";
}
echo "<br /><a href=\"$_SERVER[SCRIPT_NAME]\">Check again?</a>";
}
?>
</p>
</body>
</html>
|