【问题标题】:Regex in jQuery validation - require a number with 5 digits and 1 letter (letter is not case sensitive)jQuery 验证中的正则表达式 - 需要 5 个数字和 1 个字母的数字(字母不区分大小写)
【发布时间】:2016-09-09 22:06:21
【问题描述】:

我正在尝试制作一个带有一些验证的表单。我遇到的一个问题是注册号验证。每个用户都已经属于一个关联,所以当他们联系我们时,我们必须通过检查数据库中的号码来验证是他们。我需要的帮助是注册号上的正则表达式。

目标是让他们提交 5 位数字和 1 个字母的数字。该字母不区分大小写。到目前为止,我已经尝试过:

^(\d{5})([A-Z]{1})$

任何像 12345A 这样的数字都是可以接受的。

此验证似乎有点过分,但我们的用户往往会经常插入错误信息,并且不会立即回复电子邮件,因此他们可以提交正确的详细信息,而无需我们追查他们的正确信息信息。

感谢任何帮助或指出错误。

contact.js

$(function() {
  // Validate the contact form
  $('#contactform').validate({
    // Specify what the errors should look like
    // when they are dynamically added to the form
    errorElement: "label",
    wrapper: "td",
    errorPlacement: function(error, element) {
      error.insertBefore(element.parent().parent());
      error.wrap("<tr class='error'></tr>");
      $("<td></td>").insertBefore(error);
    },

    // Add requirements to each of the fields
    rules: {
      name: {
        required: true,
        minlength: 2
      },
      email: {
        required: true,
        email: true
      },
      RegNo: {
        required: true,
        minlength: 6
      },
      tuname: {
        required: true,
        minlength: 1
      },
      dob: {
        required: true,
        minlength: 10
      }
    },

    // Specify what error messages to display
    // when the user does something horrid
    messages: {
      name: {
        required: "Please enter your name.",
        minlength: jQuery.format("At least {0} characters required.")
      },
      email: {
        required: "Please enter your email.",
        email: "Please enter a valid email."
      },
      RegNo: {
        required: "Please enter your Reg No. (eg. 12345A)",
        minlength: jQuery.format("At least {0} characters required. eg. 12345A")
      },
      tuname: {
        required: "Please enter your Twitter Username.",
        minlength: jQuery.format("At least {0} characters required.")
      },
      dob: {
        required: "Please enter a DOB.",
        dob: jQuery.format("At least {0} characters required.")
      }
    },

    // Use Ajax to send everything to processForm.php
    submitHandler: function(form) {
      $("#send").attr("value", "Sending...");
      $(form).ajaxSubmit({
        success: function(responseText, statusText, xhr, $form) {
          $(form).slideUp("fast");
          $("#response").html(responseText).hide().slideDown("fast");
        }
      });
      return false;
    }
  });
});

strong text
<?php

// Clean up the input values
foreach($_POST as $key => $value) {
	if(ini_get('magic_quotes_gpc'))
		$_POST[$key] = stripslashes($_POST[$key]);
	
	$_POST[$key] = htmlspecialchars(strip_tags($_POST[$key]));
}

// Assign the input values to variables for easy reference
$name = $_POST["name"];
$email = $_POST["email"];
$RegNo = $_POST["RegNo"];
$tuname = $_POST["tuname"];
$dob = $_POST["DOB"];

// Test input values for errors
$errors = array();
if(strlen($name) < 2) {
	if(!$name) {
		$errors[] = "You must enter a name.";
	} else {
		$errors[] = "Name must be at least 2 characters.";
	}
}
if(!$email) {
	$errors[] = "You must enter an email.";
} else if(!validEmail($email)) {
	$errors[] = "You must enter a valid email.";
}
if(strlen($RegNo) < 6) {
   if(!$RegNo) {
      $errors[] = "You must enter a Reg Number. (e.g. 12345A)";
   } else {
      $errors[] = "Name must be at least 6 characters. (e.g. 12345A)";
   }
}
if(strlen($tuname) < 2) {
   if(!$tuname) {
      $errors[] = "You must enter your twitter username.";
   } else {
      $errors[] = "Username cannot be blank.";
   }
}
if(strlen($DOB) < 10) {
	if(!$DOB) {
		$errors[] = "You must enter a D.O.B.";
	} else {
		$errors[] = "D.O.B. must be at least 10 characters.";
	}
}

if($errors) {
	// Output errors and die with a failure message
	$errortext = "";
	foreach($errors as $error) {
		$errortext .= "<li>".$error."</li>";
	}
	die("<span class='failure'>The following errors occured:<ul>". $errortext ."</ul></span>");
}

// Send the email
$to = "email@domain.com";
$subject = "email subject";
$message = "$name, $RegNo, $tuname, $dob";
$headers = "From: $email";

mail($to, $subject, $message, $headers);

// Die with a success message
die("<span class='success'>Success! Your message has been sent.</span>");

// A function that checks to see if
// an email is valid
function ValidatePPS($RegNo) {
var formatRegex = /^(\d{7})([A-Z]{1,2})$/i;

if (!formatRegex.test($RegNo)) {
return "The format of the provided PPSN is invalid"; }
}

function validEmail($email)
{
   $isValid = true;
   $atIndex = strrpos($email, "@");
   if (is_bool($atIndex) && !$atIndex)
   {
      $isValid = false;
   }
   else
   {
      $domain = substr($email, $atIndex+1);
      $local = substr($email, 0, $atIndex);
      $localLen = strlen($local);
      $domainLen = strlen($domain);
      if ($localLen < 1 || $localLen > 64)
      {
         // local part length exceeded
         $isValid = false;
      }
      else if ($domainLen < 1 || $domainLen > 255)
      {
         // domain part length exceeded
         $isValid = false;
      }
      else if ($local[0] == '.' || $local[$localLen-1] == '.')
      {
         // local part starts or ends with '.'
         $isValid = false;
      }
      else if (preg_match('/\\.\\./', $local))
      {
         // local part has two consecutive dots
         $isValid = false;
      }
      else if (!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain))
      {
         // character not valid in domain part
         $isValid = false;
      }
      else if (preg_match('/\\.\\./', $domain))
      {
         // domain part has two consecutive dots
         $isValid = false;
      }
      else if(!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/',
                 str_replace("\\\\","",$local)))
      {
         // character not valid in local part unless 
         // local part is quoted
         if (!preg_match('/^"(\\\\"|[^"])+"$/',
             str_replace("\\\\","",$local)))
         {
            $isValid = false;
         }
      }
      if ($isValid && !(checkdnsrr($domain,"MX") || checkdnsrr($domain,"A")))
      {
         // domain not found in DNS
         $isValid = false;
      }
   }
   return $isValid;
}

function validateDate($dob)
{
    $d = DateTime::createFromFormat('d-m-Y', $dob);
    return $d && $d->format('d-m-Y') === $dob;
}

?>

**index.html**
<div id="form-group" align="center">
  <form id="contactform" action="processForm.php" method="post">
    <table>
      <br>
      <tr>
        <td>
          <p>
            <label for="name">Full Name:</label>
        </td>
        <td>
          <input type="text" id="name" name="name" class="form-control" />
          </p>
        </td>
      </tr>
      <tr>
        <td>
          <p>
            <label for="email">Email Address:</label>
        </td>
        <td>
          <input type="email" id="email" name="email" class="form-control" />
          </p>
        </td>
      </tr>
      <tr>
        <td>
          <p>
            <label for="RegNo">Garda Reg No:</label>
        </td>
        <td>
          <input type="text" id="RegNo" name="RegNo" class="form-control"></input>
          </p>
        </td>
      </tr>
      <tr>
        <td>
          <p>
            <label for="tuname">Twitter Username:</label>
        </td>
        <td>
          <input type="text" id="tuname" name="tuname" class="form-control"></input>
          </p>
        </td>
      </tr>
      <tr>
        <td>
          <p>
            <label for="dob">D.O.B:</label>
        </td>
        <td>
          <input type="date" id="dob" name="dob" class="form-control" placeholder="00/00/00"></input>
          </p>
        </td>
      </tr>
      <tr>
        <td></td>
        <td>
          <p>
            <input type="submit" value="Send!" id="send" type="button" class="btn btn-primary" />
          </p>
        </td>
      </tr>
    </table>
  </form>
  <div id="response"></div>
</div>

【问题讨论】:

  • 好吧,什么在这里不起作用?
  • 我们需要使用 addMethod API。这将帮助你stackoverflow.com/questions/13785529/…
  • @Bkjain655 你是正确的。我添加了一个 addMethod 并给它一个正则表达式。然后在我的规则中为该字段设置正则表达式。谢谢你的帮助

标签: javascript php jquery regex validation


【解决方案1】:

在您的正则表达式中,{1} 是不必要的,因为 [A-Z] 已经强制使用单个字符。表达式可以改写为^(\d{5})([A-Z])$

否则,您的表达式将匹配任何 5 位数字后跟一个字母的字符串。

【讨论】:

    猜你喜欢
    • 2012-09-28
    • 1970-01-01
    • 2012-11-10
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多