2014-10-10 278 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}))/; 
相關問題