我在页面上有一个文本字段,允许人们输入他们的名字。然后将其包含在专门为其设置的URL中,例如mysite.net/johnnyfive
我不希望人们在他们的名字中使用任何特殊字符,包括非英语字母表中的字符,如阿拉伯语或中文。
如何验证 ColdFusion 中的English alphabet?我想出了英文名#REReplace(LCase(ARGUMENTS.Name), '[^a-z0-9]', '', 'ALL')#
,以确保只允许字符A-Z和数字。但是,如果某人输入نازنین
之类的内容,那么我希望它完全拒绝它,而不是试图替换它。
我也想在jQuery端执行此操作并将其绑定到文本字段,以便在有人尝试输入非英语字符时抛出错误。我想即使不允许使用á
这样的变音字符。
我正在使用ColdFusion 10,jQuery 1.9和jQuery Validate
答案 0 :(得分:6)
您可以使用相同的正则表达式来验证字段。在正则表达式周围添加锚点,以确保正则表达式匹配的字符串没有任何前提或后跟
^[^a-z0-9]$
^
将正则表达式固定在字符串的开头。
$
在字符串末尾锚定正则表达式。
示例:http://regex101.com/r/tJ7tJ9/1
您可以使用匹配函数来确保字符串与正则表达式匹配
实施例
var str = "نازنین";
if(str.match(/^[a-z0-9]+$/gi))
{
//Do something
}
else
{
// Do something else
}
答案 1 :(得分:2)
您可以使用DeAccent UDF(java):
http://www.cflib.org/udf/deAccent
<cfscript>
function deAccent(str){
var Normalizer = createObject("java","java.text.Normalizer");
var NormalizerForm = createObject("java","java.text.Normalizer$Form");
var normalizedString = Normalizer.normalize(str, createObject("java","java.text.Normalizer$Form").NFD);
var pattern = createObject("java","java.util.regex.Pattern").compile("\p{InCombiningDiacriticalMarks}+");
return pattern.matcher(normalizedString).replaceAll("");
}
</cfscript>
然后执行字符串比较:
if (originalString NEQ deAccent(originalString)){
writeOutput("Invalid String");
}
如果您想使用jQuery进行验证,可以使用对ColdFusion服务器的ajax请求来执行。你应该这样做,以确保字符串是唯一的,因为你声明你打算创建子目录/虚拟路径。