【问题标题】:I have built a regex but there is an issue [closed]我已经建立了一个正则表达式,但有一个问题[关闭]
【发布时间】:2018-09-05 05:46:58
【问题描述】:

我有这个正则表达式如下

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

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

【问题讨论】:

  • 你没有指定行尾。
  • 为什么这被标记为javascript php?
  • 请在此站点搜索正则表达式密码验证。我绝对确定您会找到与您之前已在此处回答的具有相同要求的 900 多个结果之一。
  • 您可能会受益于Reference - Password Validation

标签: javascript php regex


【解决方案1】:

/^(?=.*[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/

【讨论】:

  • 谢谢你的修改,我很感激
  • {8} 应该足以指定“正好 8”。
  • 当然是@PJSCopeland
【解决方案2】:

您应该为此使用一堆RegExps:

/* 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 将正确的 post 值传递给服务器,可能如下所示:

<?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){ }
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    • 2016-10-11
    • 1970-01-01
    • 2011-07-30
    • 1970-01-01
    • 2020-08-19
    相关资源
    最近更新 更多