【问题标题】:Form Validation With Regex使用正则表达式进行表单验证
【发布时间】:2013-11-25 03:27:23
【问题描述】:

我编写了一个函数来验证密码是否有效。我遇到的唯一问题是弄清楚为什么我用 JavaScript 编写的这种模式在使用诸如“SteveRogers#256”之类的密码进行测试时没有评估为真。这是我声明正则表达式模式的方式的问题吗?

PHP

function check_password($pass_word)
{
    $pattern = "#.*^(?=.{8,15})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*\W).*$#";

    return (preg_match($pattern, $pass_word));
}

JavaScript

function check_password(pass_word) {
    var pattern = new RegExp("#.*^(?=.{8,15})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*\W).*$#");

    return pattern.test(pass_word);
}

【问题讨论】:

  • javascript 不像 php 那样在模式字符串中使用模式分隔符。您需要从 js 中删除 #
  • 我讨厌那些要求我必须(几乎总是)在那里使用安全密码的网站。
  • @Dagon 哈哈,对吧?我现在只是需要一些东西。我很快就会强化模式。
  • 更好,完全删除它。
  • @Dagon 你有什么建议?

标签: javascript php regex


【解决方案1】:

删除 Javascript 中的正则表达式分隔符,因为 new RegExp 在构造函数中采用字符串。正确的 Javascript 代码应该是:

var pattern = new RegExp("^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[0-9])(?=.*?\\W).{8,15}$");

【讨论】:

  • 感谢反馈!
  • +1 但请注意,有一个更高效的表达式,不需要点星:/^(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])(?=[^0-9]*[0-9])(?=\w*\W).{8,15}$/
  • @ridgerunner:谢谢,是的,我同意你的建议。我自己过去曾以这种方式使用过这些前瞻。
  • @ridgerunner:你可能会觉得这个讨论很有趣:stackoverflow.com/a/20194698/548225
猜你喜欢
  • 2020-02-18
  • 1970-01-01
  • 2014-12-25
  • 2014-04-21
  • 2020-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多