2016-05-16 57 views
0

嗨,有人可以幫助我改進此函數的正則表達式以包含負值嗎?按鍵上的正則表達式爲負數的小數點

的功能是:

function Validate7EntY2Dec(e, field) { 
    key = e.keyCode ? e.keyCode : e.which 
    // backspace 
    if (key == 8) return true 

    // 0-9 a partir del .decimal 
    if (field.value != "") { 
     if ((field.value.indexOf(".")) > 0) { 
      if (key > 47 && key < 58) { 
       if (field.value == "") return true 
       regexp = /[0-9]{2}$/ 
       return !(regexp.test(field.value)) 
      } 
     } 
    } 
    // 0-9 
    if (key > 47 && key < 58) { 
     if (field.value == "") return true 
     regexp = /[0-9]{7}/ 
     return !(regexp.test(field.value)) 
    } 
    // . 
    if (key == 46) { 
     if (field.value == "") return false 
     regexp = /^[0-9]+$/ 
     return regexp.test(field.value) 
    } 
    // other key 
    return false 
} 

據我得到/[0-9]{2}$/驗證小數點後兩位數字,/[0-9]{7}/驗證在整數7個digist。我想這也接受負值,因此用戶可以插入例如-1234567.12

我發現這個正則表達式^[+-]?[0-9]{1,9}(?:\.[0-9]{1,2})?$在其他問題上,但不知道如何插入我的函數。 還發現,/[0-9]{7}/添加-將接受負值,但它沒有,我這樣做:/[-0-9]{7}/

我需要讓我的功能,因爲它被使用過。

謝謝你提前!

編輯:

的@Ian我的代碼的建議後是這樣:

function Validate7EntY2Dec_Neg(e, field) { 
    key = e.keyCode ? e.keyCode : e.which 
    // backspace 
    if (key == 8) return true 

    // 0-9 a partir del .decimal 
    if (field.value != "") { 
     if ((field.value.indexOf(".")) > 0) { 
      if (key > 47 && key < 58) { 
       if (field.value == "") return true 
       regexp = /[0-9]{2}$/ 
       return !(regexp.test(field.value)) 
      } 
     } 
    } 
    // 0-9 
    if (key > 47 && key < 58) { 
     if (field.value == "") return true 
     regexp = /[0-9]{7}/ 
     return !(regexp.test(field.value)) 
    } 
    // . 
    if (key == 46) { 
     if (field.value == "") return false 
     regexp = /^[+-]?[0-9]{7}\.[0-9]{2}$/ 
     return regexp.test(field.value) 
    } 
    // other key 
    return false 
} 

的變化是 「功能,如果(鍵== 46)......」

if (key == 46) { 
    if (field.value == "") return false 
    regexp = /^[+-]?[0-9]{7}\.[0-9]{2}$/ 
    return regexp.test(field.value) 
} 

@Ian如何逃脫 - ??

+0

爲什麼要使用正則表達式的關係嗎? 'number <0'對於負值是一個完美的檢查 – SeinopSys

+0

正則表達式是十進制的@SeinopSys,我需要7個整數和最多2個小數 – Marcos

+0

您可以使用不同的方法來驗證這些部分,並且它會更容易維護比基於正則表達式的解決方案。 – SeinopSys

回答

0

^[+ - ]?[0-9] {7} \。[0-9] {2} $應該有效。插入字符串的開始和美元的結束。我也強制一個7.2位數字,我認爲這是你想要的。也有可選的+/-開始。

+0

yeap,我想要那種正則表達式,但在我的函數中。可以幫助我在現有的Validate7EntY2Dec函數中包含+/-。謝謝:))) – Marcos

+0

使用我給你看的正則表達式。行regexp =/^ [0-9] + $ /應該包含我的驗證整個數字。如果你想單獨驗證整數和小數位的分解 – Ian

+0

很酷,謝謝,我現在就試一試,我們正在接近我的瞄準結果。我如何分解它來分別驗證整數和小數位? – Marcos

0

我建議你不要再擔心按鍵,並在每次改變它時驗證整個字段。我相信這不會導致任何性能問題,並會大大提高您的代碼的可維護性。

然後,我會提出下面的代碼:

function Validate7EntY2Dec_Neg(e, field) { 
    return /^[+-]?[0-9]{7}\.[0-9]{2}$/.test(field.value); 
}