2014-10-10 143 views
0

我在C#中创建了一个正则表达式,用于模型验证。我需要在JavaScript中相同。请帮我转换。将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; } 

还有一验证消息 “字段必须是数字”

我在JavaScript试图这样

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

但是这总是返回真实

感谢

+0

我建议使用JavaScript的内置正则表达式来避免字符串转义问题:'var regExp = /^(([a-zA-Z]+)|(\d{0,15}.\d {0,2}))$ /;' – cdhowie 2014-10-10 06:43:45

回答

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 
+0

感谢您的回复。我尝试像下面但没有工作。 var regExp = /^(([a-zA-Z]+)|(\d{0,15}\.\d{0,2}))$/; var res = regExp.test(extCost); – 2014-10-10 06:55:40

+0

请看我更新的答案。 – Mrchief 2014-10-10 06:58:25

0

为避免你的问题使用JavaScript语法和已经提到你应该跳过小数点(\.)或使用[\.,]也与逗号相匹配(给出的示例也将匹配123W4):

var regExp = /(([a-zA-Z]+)|(\d{0,15}\.\d{0,2}))/; 
相关问题