我想搜索一个字符串,以确保它不包含任何数字或非字母字符。从我之前的问题here提出了一个似乎使用在线测试工具的Regex解决方案。但我无法以这种格式工作:
<cfif REFindNoCase(".*?\\P{IsAlphabetic}.*", FORM.Forename)>
<p>Error, your name contains illegal characters</p>
</cfif>
它只允许非法字符串通过,而不会接收非法字符。所以myname1977
似乎没有显示错误消息。我做错了什么?
答案 0 :(得分:4)
使用Reg Exp引擎ColdFusion并不具备Java的所有功能。这样的事情应该为你做到:
<cfscript>
input = "विकिपीडि";
writeDump(isValidUsername(input));// YES
input = "विकिपीडि7";
writeDump(isValidUsername(input));// NO
input = "hello";
writeDump(isValidUsername(input));// YES
input = "hel lo";
writeDump(isValidUsername(input));// NO
input = "hello7";
writeDump(isValidUsername(input));// NO
function isValidUsername(input) {
var pattern = ".*?\P{IsAlphabetic}.*";
var Matcher = createObject( "java", "java.util.regex.Pattern" )
.compile( javaCast( "string", pattern ) )
.matcher( javaCast( "string", input ) );
return !Matcher.matches();
}
</cfscript>
更新
我在评论中发布了此内容,但可能会有用,因此请将其添加到答案中,这是有意义的:
如果您正在进行简单匹配,那么Java中的字符串内置了对Reg Exp的支持,因此您应该能够执行此操作:mystring.matches(".*?\P{IsAlphabetic}.*");
由于CF可能会改变某些内容,因此createObject版本更“可靠”打破它的未来。