これを個々のテストに分解すると、次のようになります。
- コーディングしやすい
- 読みやすい
- メンテナンスが容易
- 要件が変更されたときの柔軟性
次のようなことを試してください:
var testPassword = function (password) {
var minLengthMet = password.length >= 8,
hasUpper = (/[A-Z]+/).test(password),
hasLower = (/[a-z]+/).test(password),
hasNumber = (/[0-9]+/).test(password),
letterBegin = (/^[A-Za-z]/).test(password),
noSpecials = !(/[^A-Za-z0-9]+/).test(password);
return minLengthMet && hasUpper && hasLower && hasNumber && letterBegin && noSpecials;
};
ここで実際の動作を確認してください: http://jsfiddle.net/H9twa/