我已经建立了一个正则表达式,但有一个问题

时间:2018-03-26 23:50:33

标签: javascript php regex

我有这个正则表达式如下

/^\S(?=.*[a-z])(?=.*[A-Z])(?=.{8,})(?=.*[0-9])\S

它完成了大部分假设,例如必须是8个字符长,至少有一个大写字符,一个小写和一个数字但问题是它接受字符串末尾的任何特殊字符,即使它通过了其他验证我不能有这个可以有人修改这个正则表达式,它保持以前提到的相同的功能,但根本不接受任何特殊字符。哦这是用于php和javascript我用这个用于客户端和服务器端验证密码任何关于正则表达式失败的线索非常感谢。

2 个答案:

答案 0 :(得分:0)

你应该使用一堆RegExp

/* javascript */
if(yourString.length > 7 && /[A-Z]/.test(yourString) && /[a-z]/.test(yourString) && /\d/.test(yourString)){
  // pass - ajax to test on server if done with submission
else{
  //fail
}

PHP验证,假设您已通过AJAX将正确的帖子值传递给服务器,可能如下所示:

<?php
$response = array('good' => false);
if(isset($_POST['eight_or_more']){ // you can ajax string as any valid prop name
  $eom = $_POST['eight_or_more'];
  if(count($eom) > 7 && preg_match('/[A-Z]/', $eom) && preg_match('/[a-z]/', $eom) && preg_match('/\d/', $eom)){
  $response['good'] = true;
}
echo json_encode(response); // now JavaScript should look for resp ajax data argument - if(data.good){ }
?>

答案 1 :(得分:0)

/^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?:[a-zA-Z0-9]{8,})$/(点击查看图表)

我认为你的意思是至少 8个字符。如果没有,那么您需要{8}(确切地说是8)而不是{8,}(至少8)

我认为“没有特殊字符”仅表示字母和数字字符,[a-zA-Z0-9]如果允许任何其他字符,则可以在此处添加。

此处测试:https://regex101.com/r/QW2qbo/1/