-1

我正在实施密码复杂性检查,其中一个要求是密码至少包含一组字符中的一个。

我将如何为此编写一个有效的函数,即

function hasOneOfChars(s, chars) {
  // assuming both s and chars are strings, 
  // return true iff s has at least one char from chars
}

谢谢!

4

4 回答 4

2

而不是使用上述函数尝试将其与正则表达式模式一起使用。

  • 至少包含 8 个字符
  • 至少包含 1 个数字
  • 至少包含 1 个小写字符 (az)
  • 至少包含 1 个大写字符 (AZ)
  • 仅包含 0-9a-zA-Z

如果您想要一组字符使用以下模式,此外 {4,} 至少包含字符,因此您可以根据您的要求进行更改

[a-zA-Z0-9]{4,}

谢谢。

于 2018-05-03T04:42:05.943 回答
1

您可以对两个字符串进行排序并执行以下操作:

var s = "ytreza".split("").sort().join("");
var chars = "ytrewq".split("").sort().join("");
hasOneOfChars(s, chars); // true

function hasOneOfChars (s, chars) {
  var a, b, i, n;
  if (s < chars) a = s, b = chars;
  else a = chars, b = s;
  i = 0, n = a.length;
  while (i < n && a[i] !== b[0]) i++;
  return i < n;
}

使用已排序的字符串,您不必再遍历两个字符串:

a = "azerty"
b = "qwerty"
n = a.length // 6
i = 0, a[i] === b[0] ? false
i = 1, a[i] === b[0] ? false
i = 2, a[i] === b[0] ? true
return i < n // true
于 2018-05-03T05:13:00.600 回答
1

按要求接收 2 个字符串参数。你可以试试下面的代码。

function hasOneOfChars(s, chars) {
	for (let char of chars.split(""))
		if (s.indexOf(char) > -1) {
			return true;
		}
	return false;
}

console.log(hasOneOfChars("abcd", "abcasjkdf"));

于 2018-05-03T04:55:32.737 回答
1

(功劳归于CertainPerformance)

// assuming both s and chars are strings, return true iff s has at least one char from chars
function hasOneOfChars(s, chars) {
  return [...chars].some(char => s.includes(char));
}

console.log(hasOneOfChars('aaabbb', 'ax'));
console.log(hasOneOfChars('aaabbb', 'xy'));

于 2018-05-04T23:41:22.100 回答