将C#正则表达式转换为JavaScript正则表达式
本文关键字:正则表达式 JavaScript 转换 | 更新日期: 2023-09-27 18:26:04
我在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());
但这总是返回真正的
感谢
如果您试图验证成本必须包含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
为了避免出现问题,请使用JavaScript语法,如前所述,您应该转义小数点('.
)或使用['.,]
来匹配逗号(给定的示例也将匹配123W4
):
var regExp = /(([a-zA-Z]+)|('d{0,15}'.'d{0,2}))/;