我从服务器的json获得以下正则表达式
regexval = ^[A-Za-z\\'\\s\\.\\-\\,]{1,50}$
这个正则表达式有一个问题,它有一个'破坏我的js代码来测试这个正则表达式。我如何使这成为一个有效的正则表达式?
我正在做这样的事情来测试它
if(!regexval.replace(/\\/g,"\\").test(inputVal)) {
}
修改
以下是JSON
[
{
"ExtensionData": {},
"Data1": null,
"DisplayName": "First Name",
"IsRequired": true,
"LengthValidation": 0,
"Name": "ServiceFirstName",
"RegexValidation": "^[A-Za-z\\'\\s\\.\\-\\,]{1,50}$",
"Type": "String",
"ValidationMessage": "The field 'First Name' doesn't meet the format requirements"
},
{
"ExtensionData": {},
"Data1": null,
"DisplayName": "Last Name",
"IsRequired": true,
"LengthValidation": 0,
"Name": "ServiceLastName",
"RegexValidation": "^[A-Za-z\\'\\s\\.\\-\\,]{1,50}$",
"Type": "String",
"ValidationMessage": "The field 'Last Name' doesn't meet the format requirements"
}
]
答案 0 :(得分:3)
双重反斜杠在RegEx表示法中计算为文字反斜杠...或者在字符串中转义反斜杠(当评估为正则表达式时,它会转义下一个字符)。
RegEx构建解决方案是:
regexval=/^[A-Za-z\'\s\.\-\,]{1,50}$/
字符串构建解决方案是:
regexval = new RegExp("^[A-Za-z\\'\\s\\.\\-\\,]{1,50}$");
这两个都会生成JavaScript RegEx object,然后您可以调用.test
等。
if (regexval.test(inputVal)) {
//... do something
}
您的更新
那么根据您的更新,如果您将上述结构解析为名为jsonobj
的本地JS对象(例如......如何解析等我假设您知道)并且您只想测试第一个条目在返回的JSON数组中......您需要执行以下操作:
//jsonobj - JS object after parsing your example JSON above
var regex=new RegEx(jsonobj[0].RegexValidation);
if (regex.test(inputVal)) {
//... do your work here
}
答案 1 :(得分:1)
regexval = /^[A-Za-z\\'\\s\\.\\-\\,]{1,50}$/
你错过了使它成为正则表达式所需的/ s
看起来你真的需要
regexval = /^[A-Za-z\'\s\.\-\,]{1,50}$/
答案 2 :(得分:1)
您可以将单引号更改为unicode字符/u0027
或使用ASCII \x27
并使其正常工作吗?
在此处查看此行动:http://jsfiddle.net/TezdR/1/
所以,你真的不需要进行替换,但可以使用“字符串” - 这是一个更新版本,你可以看到我在FirstName上进行替换但不是最后一次 - 而且他们都应该同样的工作:http://jsfiddle.net/TezdR/2/