将C#正则表达式转换为JavaScript正则表达式

时间:2014-10-10 06:42:03

标签: javascript c# regex

我在C#中创建了一个正则表达式,我在模型验证中使用它。我在JavaScript中需要相同的东西。请帮我转换。

这是C#中的正则表达式

[Required]
[Display(Name = "Cost")]
[DataType(DataType.Currency)]
[RegularExpression(@"^(([a-zA-Z]+)|(\d{0,15}.\d{0,2}))$", ErrorMessage = "Cost can not have more than 2 decimal places.")]
[Range(typeof(Decimal), "0.01", "99999999999999.99", ErrorMessage = "{0} must be a decimal/number greater than 0 and less than 100000000000000.")]
public Nullable<decimal> Cost { get; set; }

还有一条验证讯息&#34;字段必须是数字&#34;

我在javascript中尝试这样做

var regExp = new RegExp("(([a-zA-Z]+)|(\d{0,15}.\d{0,2}))");
var res = regExp.test($('#Cost').val());

但这总是会返回真实的

由于

2 个答案:

答案 0 :(得分:2)

如果您要验证费用必须包含2个小数位,请取出正则表达式中与任何字母字符串匹配的“或”部分:

^(\d{0,15}\.\d{0,2})$

注意:您也不需要括号,因为您不会在此处对捕获的值执行任何操作。

你提到的正则表达式也会在C#中失败,但是由于你的Range属性,你会觉得它有效。

最后,如果您使用new Regexp语法,则需要转义斜杠:

var re = new RegExp("^\\d{0,15}\\.\\d{0,2}$");

// or using shorter JS syntax
var re = /^\d{0,15}\.\d{0,2}$/;

样品运行:

console.log(re.test("abc"));  // false
console.log(re.test("10.23"));  // true
console.log(re.test("10"));  // false

答案 1 :(得分:0)

为了避免您的问题使用JavaScript语法,并且如前所述,您应该转义小数点(\.)或使用[\.,]来匹配逗号(给定的示例也将匹配{{1 }}):

123W4