我正在尝试让我的代码用于表单。我希望它验证一个电话号码。它想继续告诉我电话号码是不正确的,即使它是。
这就是我所拥有的。我拿出了与此部分相关的其余代码来简化它。我不确定我是否有正确的代码,但我希望有人只能输入数字。输入一个10位数的数字字符串,并将其更改为以下格式(XXX)XXX-XXXX(如果可能)。
<?php
include_once "contact-config.php";
$error_message = '';
if (!isset($_POST['submit'])) {
showForm();
} else { //form submitted
$error = 0;
if(!empty($_POST['phone'])) {
$phone[2] = clean_var($_POST['phone']);
if (!validPhone($phone[2])) {
$error = 1;
$phone[3] = 'color:#FF0000;';
$phone[4] = '<strong><span style="color:#FF0000;">Invalid Phone Number</span></strong>';
}
}
else {
$error = 1;
$phone[3] = 'color:#FF0000;';
}
<td class="quote_text" style="width:{$left_col_width}; text-align:right; vertical-align:top; padding:{$cell_padding}; {$phone[3]}"><span class='required'><b>* </b></span>{$phone[0]}</td>
<td style="text-align:left; vertical-align:top; padding:{$cell_padding};"><input type="text" name="{$phone[1]}" value="{$phone[2]}" size="20" maxlength="11" id="{$phone[1]}" /> {$phone[4]}</td>
/* Phone Number Validation Function. */
function validPhone($phone)
{
$isValid = true;
if(array_key_exists('phone', $_POST))
{
if(!preg_match('/^[0-9]{3}-[0-9]{3}-[0-9]{4}$/', $_POST['phone']))
{
$isValid = false;
}
}
return $isValid;
}
?>
答案 0 :(得分:0)
虽然我没有深入调试,但我对原始代码有一些评论。
http://php.net/manual/en/function.preg-match.php有一个正则表达式,你可能会尝试更复杂。它大约是页面的一半。我在http://regexpal.com/和http://www.solmetra.com/scripts/regex/index.php处尝试了你的正则表达式;它在我用过的电话号码的任何一个地方都没有用。我从PHP参考页面中提取的正则表达式,如下所示,有效。
/ ^(?:1(?:[。 - ])?)?(?:((?= \ d {3})))?([2-9] \ d {2})(? :(?&LT; =(\ d {3})))? ?(?:?(小于= \ d {3})[.-])([2-9] \ d {2})[?。 - ]?(\ d {4})(?:(?i:ext)。?(\ d {1,5}))?$ /
您正在使用参数调用该函数,然后不使用函数体中的参数,这让我觉得奇怪。
这可能是PHP: Validation of US Phone numbers的重复主题,非常全面。