PHP正则表达式问题(用户名、生日、电子邮件地址)
下面的正则表达式似乎不起作用。这是因为!预匹配?PHP正则表达式问题(用户名、生日、电子邮件地址),php,regex,Php,Regex,下面的正则表达式似乎不起作用。这是因为!预匹配? 用户名 生日 if (!preg_match("'\b(0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01])[- /.](19|20)?[0-9]{2}\b'", $_POST['birthdate'])) { $hasErr = true; $return['birthdate'] = 'Please enter your birthdate in a valid format. mm/d
用户名 生日
if (!preg_match("'\b(0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01])[- /.](19|20)?[0-9]{2}\b'", $_POST['birthdate'])) {
$hasErr = true;
$return['birthdate'] = 'Please enter your birthdate in a valid format. mm/dd/yyy';
}
电子邮件地址
if (!preg_match("'\b[A-Z0-9._%-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4}\b'",$_POST['email'])) {
$hasErr = true;
$return['email'] = 'Please enter a valid email address.';
}
这是我要做的
<?php
// remove whitespaces
array_walk($_POST, 'trim');
function validate() {
$return = array();
if (!preg_match('/^[A-Za-z](?=[A-Za-z0-9_.]{3,31}$)[a-zA-Z0-9_]*\.?[a-zA-Z0-9_]*$/',$_POST['username'])) {
$return['username'] = 'Please enter a valid username. Use 4 to 32 characters '
. 'and start with a letter. You may use letters, numbers, '
. 'underscores, and one dot (.).';
}
if (!preg_match('/^(0?[1-9]|1[012])[- .\/](0?[1-9]|[12][0-9]|3[01])[- .\/](19|20)?[0-9]{2}$/', $_POST['birthdate'])) {
$return['birthdate'] = 'Please enter your birthdate in a valid format. mm/dd/yyy';
}
// email regexes are pretty problematic
if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
$return['email'] = 'Please enter a valid email address.';
}
return (empty($return)) ? true : $return;
}
echo '<pre>';
var_dump(validate());
echo '</pre>';
?>
注意:我没有检查你的用户名regex 它们以何种方式失效?您的用户名和生日的预期格式是什么?另外,请注意,如果字符串中出现姓名、生日或电子邮件地址,您将进行匹配。使用
^regex$
而不是\bregex\b
来测试整个字符串,而不仅仅是在单词边界处查找需求。
<?php
// remove whitespaces
array_walk($_POST, 'trim');
function validate() {
$return = array();
if (!preg_match('/^[A-Za-z](?=[A-Za-z0-9_.]{3,31}$)[a-zA-Z0-9_]*\.?[a-zA-Z0-9_]*$/',$_POST['username'])) {
$return['username'] = 'Please enter a valid username. Use 4 to 32 characters '
. 'and start with a letter. You may use letters, numbers, '
. 'underscores, and one dot (.).';
}
if (!preg_match('/^(0?[1-9]|1[012])[- .\/](0?[1-9]|[12][0-9]|3[01])[- .\/](19|20)?[0-9]{2}$/', $_POST['birthdate'])) {
$return['birthdate'] = 'Please enter your birthdate in a valid format. mm/dd/yyy';
}
// email regexes are pretty problematic
if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
$return['email'] = 'Please enter a valid email address.';
}
return (empty($return)) ? true : $return;
}
echo '<pre>';
var_dump(validate());
echo '</pre>';
?>