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

Javascript 我已经建立了一个正则表达式,但有一个问题,javascript,php,regex,Javascript,Php,Regex,我有如下的正则表达式 /^\S(?=.*[a-z])(?=.*[A-Z])(?=.{8,})(?=.*[0-9])\S 它完成了它假设的大部分功能,比如必须是八个字符长,至少有一个大写字符、一个小写字符和一个数字,但是问题是它接受字符串末尾的任何特殊字符,即使它通过了另一个验证,我不能让它这样做。有人能修改这个正则表达式使它保持不变吗前面提到的功能,但不接受任何特殊字符。哦,这是针对php和javascript的。我将其用于客户端和服务器端密码验证。非常感谢您提供有关正则表达式失败的任何线索。

我有如下的正则表达式

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

它完成了它假设的大部分功能,比如必须是八个字符长,至少有一个大写字符、一个小写字符和一个数字,但是问题是它接受字符串末尾的任何特殊字符,即使它通过了另一个验证,我不能让它这样做。有人能修改这个正则表达式使它保持不变吗前面提到的功能,但不接受任何特殊字符。哦,这是针对php和javascript的。我将其用于客户端和服务器端密码验证。非常感谢您提供有关正则表达式失败的任何线索。

您应该使用一系列的
RegExp
s:

/* 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
}
假设您已通过AJAX将正确的post值传递给服务器,PHP验证可能如下所示:

<?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){ }
?>
(点击查看图表)

我想你的意思至少是8个字符。如果没有,则需要
{8}
(正好是8)而不是
{8,}
(至少8)

我假设“无特殊字符”仅表示字母和数字字符,
[a-zA-Z0-9]
如果允许任何其他字符,则可以在此处添加它们


此处的测试:

您没有指定行的结尾。为什么要将其标记为javascript和php?请搜索此站点以获得regex密码验证。我绝对肯定你会发现900多个结果中有一个与你之前得到的答案具有相同的要求。你可能会受益于感谢你的修改。我很感激
{8}
应该足以指定“正好8”。当然是@PJSCopeland