Java 创建密码验证器的规则之一是:密钥必须包含'#';或A'_';,但不是两者都有
我正在制作一个密码/密钥验证程序,其中包含一组验证密码/密钥必须满足的规则 这些规则如下: -密钥长度至少为7个字符,最多为20个字符,并且 -密钥不得以特殊字符“#”或“”开头,以及 -键的任何位置都不能有空格字符,并且 -密钥必须至少有一个大写字符和一个小写字符,以及 -密钥不能包含用户名,并且 -密钥必须包含“#”或“”,但不能同时包含两个Java 创建密码验证器的规则之一是:密钥必须包含'#';或A'_';,但不是两者都有,java,string,validation,if-statement,passwords,Java,String,Validation,If Statement,Passwords,我正在制作一个密码/密钥验证程序,其中包含一组验证密码/密钥必须满足的规则 这些规则如下: -密钥长度至少为7个字符,最多为20个字符,并且 -密钥不得以特殊字符“#”或“”开头,以及 -键的任何位置都不能有空格字符,并且 -密钥必须至少有一个大写字符和一个小写字符,以及 -密钥不能包含用户名,并且 -密钥必须包含“#”或“”,但不能同时包含两个 if (!key.matches("^[^#_]+[#_]{1,1}[^#_]*")) { UI.println("Inval
if (!key.matches("^[^#_]+[#_]{1,1}[^#_]*")) {
UI.println("Invalid: Key must contain either a '#' or a '_', but not both");
}
除了最后一条规则“密钥必须包含“#”或“#”,但不能同时包含这两个字符外,我已成功地使所有代码正常工作
我目前拥有的代码如下。我是学习java的新手,请理解
* Asks user for key word and the name and then checks if it is a valid key word.
*/
public void doCompletion(){
String key = UI.askString("Key: ");
String name = UI.askString("Your name: ");
this.validateKeyCompletion(key, name);
}
/** COMPLETION
* Report that the key is valid or report ALL the rules that the key failed.
*/
public void validateKeyCompletion(String key, String name){
/*# YOUR CODE HERE */
int characterNumber = key.length();
boolean hasUppercase;
boolean hasLowercase;
hasUppercase = !key.equals(key.toLowerCase());
hasLowercase = !key.equals(key.toUpperCase());
String specialChars = "(.*[ # _ ].*)";
if (characterNumber < 7 || characterNumber > 20){
UI.println("Invalid: Key length must not be less than 7 or greater than 20");
}
else if (key.startsWith ("#") || (key.startsWith ("_"))){
UI.println("Invalid: Key cannot start with '#' or '_'");
}
else if (key.contains(" ")){
UI.println("Invalid: Key cannot contain ' '");
}
else if(!hasUppercase)
{
UI.println("Invalid: Key must contain an uppercase character");
}
else if(!hasLowercase)
{
UI.println("Invalid: Key must contain a lowercase character");
}
else if(key.matches(name)){
UI.println("Invalid: Key cannot contain Username");
}
else if(!key.matches(specialChars)){
UI.println("Invalid: Key must contain either a '#' or a '_', but not both");
}
else {
UI.println("Valid");
}
}
*要求用户输入关键字和名称,然后检查该关键字是否有效。
*/
公共作废文件完成(){
字符串key=UI.askString(“key:”);
String name=UI.askString(“您的名字:”);
此.validateKeyCompletion(键、名称);
}
/**完成
*报告密钥有效或报告密钥失败的所有规则。
*/
公共void validateKeyCompletion(字符串键、字符串名称){
/*#你的代码在这里*/
int characterNumber=key.length();
布尔字母大写;
布尔值为小写;
hassuppercase=!key.equals(key.toLowerCase());
hasLowercase=!key.equals(key.toUpperCase());
字符串specialChars=“(.[#!].”;
如果(字符数<7 | |字符数>20){
UI.println(“无效:密钥长度不得小于7或大于20”);
}
else if(key.startsWith(“#”)||(key.startsWith(“|”)){
println(“无效:密钥不能以“#”或“#”开头);
}
else if(key.contains(“”){
UI.println(“无效:密钥不能包含“””);
}
如果(!hassuppercase)
{
println(“无效:键必须包含大写字符”);
}
如果(!hasLowercase),则为else
{
println(“无效:密钥必须包含小写字符”);
}
else if(key.matches(name)){
UI.println(“无效:密钥不能包含用户名”);
}
如果(!key.matches(specialChars))为else{
println(“无效:键必须包含“#”或“#”,但不能同时包含这两个”);
}
否则{
UI.println(“有效”);
}
}
尝试下面的方法,并在JAVA中使用indexOf方法:
* Asks user for key word and the name and then checks if it is a valid key word.
*/
public void doCompletion(){
String key = UI.askString("Key: ");
String name = UI.askString("Your name: ");
this.validateKeyCompletion(key, name);
}
/** COMPLETION
* Report that the key is valid or report ALL the rules that the key failed.
*/
public void validateKeyCompletion(String key, String name){
/*# YOUR CODE HERE */
int characterNumber = key.length();
boolean hasUppercase;
boolean hasLowercase;
hasUppercase = !key.equals(key.toLowerCase());
hasLowercase = !key.equals(key.toUpperCase());
String specialChars = "(.*[ # _ ].*)";
if (characterNumber < 7 || characterNumber > 20){
UI.println("Invalid: Key length must not be less than 7 or greater than 20");
}
else if (key.startsWith ("#") || (key.startsWith ("_"))){
UI.println("Invalid: Key cannot start with '#' or '_'");
}
else if (key.contains(" ")){
UI.println("Invalid: Key cannot contain ' '");
}
else if(!hasUppercase)
{
UI.println("Invalid: Key must contain an uppercase character");
}
else if(!hasLowercase)
{
UI.println("Invalid: Key must contain a lowercase character");
}
else if(key.matches(name)){
UI.println("Invalid: Key cannot contain Username");
}
else if(key.indexOf('#') > -1 && key.indexOf('_') > -1){
UI.println("Invalid: Key must contain either a '#' or a '_', but not both");
}
else {
UI.println("Valid");
}
}
*要求用户输入关键字和名称,然后检查该关键字是否有效。
*/
公共作废文件完成(){
字符串key=UI.askString(“key:”);
String name=UI.askString(“您的名字:”);
此.validateKeyCompletion(键、名称);
}
/**完成
*报告密钥有效或报告密钥失败的所有规则。
*/
公共void validateKeyCompletion(字符串键、字符串名称){
/*#你的代码在这里*/
int characterNumber=key.length();
布尔字母大写;
布尔值为小写;
hassuppercase=!key.equals(key.toLowerCase());
hasLowercase=!key.equals(key.toUpperCase());
字符串specialChars=“(.[#!].”;
如果(字符数<7 | |字符数>20){
UI.println(“无效:密钥长度不得小于7或大于20”);
}
else if(key.startsWith(“#”)||(key.startsWith(“|”)){
println(“无效:密钥不能以“#”或“#”开头);
}
else if(key.contains(“”){
UI.println(“无效:密钥不能包含“””);
}
如果(!hassuppercase)
{
println(“无效:键必须包含大写字符”);
}
如果(!hasLowercase),则为else
{
println(“无效:密钥必须包含小写字符”);
}
else if(key.matches(name)){
UI.println(“无效:密钥不能包含用户名”);
}
else if(key.indexOf('#')>-1&&key.indexOf('#')>-1){
println(“无效:键必须包含“#”或“#”,但不能同时包含这两个”);
}
否则{
UI.println(“有效”);
}
}
下面的正则表达式检查键是否以'.
或'.
开头,并包含其中一个字符,但不能同时包含这两个字符
if (!key.matches("^[^#_]+[#_]{1,1}[^#_]*")) {
UI.println("Invalid: Key must contain either a '#' or a '_', but not both");
}
您的代码似乎不正确,因为如果
键
同时包含
和
,您的检查将返回true
。大于-1条件检查字符是否存在,如果两者都存在,则将打印错误消息。对不起,您是对的。实际上,当键不包含not
、not
时,您的检查将忽略该情况,在这种情况下,它还返回false
。