2010-02-14 77 views
1

我允許用戶通過表單域輸入框的尺寸。允許值是:涉及使用正則表達式的Javascript函數

  1. 正整數
  2. 必須以像素或百分比結束

樣品有效的數字是300像素或70%

此外,我希望把一些額外的驗證邏輯:

如果輸入值以百分比表示,則該數字必須位於0> x < = 100的範圍內

如果輸入的數字是px,我希望能夠檢查硬編碼的最小值和最大值。

我的正則表達式知識很少,因爲我沒用多年。

我覺得寫一組輔助函數的這樣的:

// returns true if value ends in px or % [with no spaces], false otherwise 
function is_scale_valid(value){ 
} 

//returns 'px', '%' or undefined 
function get_scale_type(value){ 
} 

// called after is_scale_valid, to ensure we are dealing with 
// a +ve integer that falls in desired range. This function 
// strips away the 'scale' part of the value and only looks 
// at the number 
function is_valid_number(value, scaletype, valid_min, valid_max){ 
} 

誰能幫我填寫這些輔助功能?

回答

2

你想要的正則表達式爲:

var r = new RegExp("^\\s*(\\d+(?:\\.\\d+)?)\\s*(px|%)?\\s*$"); 

該表達式表示:

  • 允許開頭和結尾的空白(\s);
  • 該數字是一個或多個數字,可選後跟一個句點和一個或多個數字;
  • 單位可以是「px」,「%」或省略。

您需要手動檢查輸入的號碼。

var match = r.exec("93px"); 
var number = parseFloat(match[1]); 
var symbol = match[2]; 
if (symbol == "px") { 
    // validate number as a pixel 
} else if (symbol == "%") { 
    // evaluate as percentage 
} else { 
    // no symbol was entered 
} 
+0

謝謝Cletus,我修改了代碼併成功地測試了它 – 2010-02-14 14:14:19