给定示例字符串" hello",我需要一个表达式来验证用户输入(现有字母的任意组合;不重复用过的字母)。
在此上下文中,有效和无效的输入示例如下:
有效:"你好","地狱"," lol" ......等等。
无效:" heel"," loo" ...等。
我尝试过...... ...
(.)*([hello])(.)*
和
[hello]+
但是,他们不会对无效的那些进行排序。
任何帮助将不胜感激,谢谢。
注意:这不仅仅是子字符串或完全匹配,根据示例,字母组合有效。
答案 0 :(得分:0)
正则表达式不是正确的工具......它们应该用于从左到右匹配,而不是以随机顺序计算各种字符。你最好有一个验证字符串hello
,循环输入字符串中的每个字符,并检查字符是否存在(如果存在,从验证字符串中删除该字符并继续。否则,输入失败)。
这是quick example I whipped up in Java:
public static boolean testString(String testString)
{
String allowedCharacters = "hello";
for(int i = 0; i < testString.length(); i++) {
int position = allowedCharacters.indexOf(testString.charAt(i));
if(position == -1) {
System.out.println(testString + " - fail");
return false;
} else {
allowedCharacters = allowedCharacters.substring(0, position)
+ allowedCharacters.substring(position + 1);
}
}
System.out.println(testString + " - success");
return true;
}
使用示例输出调用该函数:
testString("hello"); // hello - success
testString("hell"); // hell - success
testString("lol"); // lol - success
testString("heel"); // heel - fail
testString("loo"); // loo - fail