正则表达式问题

时间:2011-08-05 16:34:31

标签: javascript jquery regex

我从服务器的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"
    }
]

3 个答案:

答案 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/

相关问题