我想驗證串是由數字或逗號或者分號:PHP:檢查是否字符串包含字符無法在陣列
有效:1.234
有效:1,234
無效:1.23a
無效:1.2_4
什麼工作:
使用str_split
創建一個數組出字符串並使用in_array
與array(0,1,2,3,4,5,6,7,8,9,',',';')
。
但這讓我感到迂迴,因爲我必須用數以百萬計的字符串來做到這一點,所以我想確保沒有更有效的方法。
問:有沒有更高效的方法?
我想驗證串是由數字或逗號或者分號:PHP:檢查是否字符串包含字符無法在陣列
有效:1.234
有效:1,234
無效:1.23a
無效:1.2_4
什麼工作:
使用str_split
創建一個數組出字符串並使用in_array
與array(0,1,2,3,4,5,6,7,8,9,',',';')
。
但這讓我感到迂迴,因爲我必須用數以百萬計的字符串來做到這一點,所以我想確保沒有更有效的方法。
問:有沒有更高效的方法?
如果你只需要驗證一個字符串(不消毒或修改它),你可以使用正則表達式。請嘗試以下操作:
if (preg_match('/^[0-9\,\;\.]+$/', $string)) {
// ok
} else {
// not ok
}
使用preg_match
功能的解決方案:
// using regexp for (numbers OR commas OR semicolons) - as you've required
function isValid($str) {
return (bool) preg_match("/^([0-9.]|,|;)+$/", $str);
}
var_dump(isValid("1.234")); // bool(true)
var_dump(isValid("1.23a")); // bool(false)
var_dump(isValid("1,234")); // bool(true)
這種方法將返回'FALSE'( 「不OK」)爲輸入'1.234'。雖然OP預計它是有效的:*有效:1.234有效:1,234無效:1.23a無效:1.2_4 * – RomanPerekhrest
這是正確的,我也加了點。 – Nitin
對不起,我忘記了陣列中的點。 – user2113177