2016-07-24 2 views
1

Я хочу, чтобы проверить, что строка состоит из цифр или запятых или точки с запятой: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,',',';').

Но это кажется мне обоюдным, и поскольку я должен делать это с помощью миллионов строк, я хочу убедиться, что нет более эффективного способа.

Вопрос: Есть ли более эффективный способ?

ответ

4

Если вам нужна только проверка строки (не дезинфекция или ее изменение), вы можете использовать регулярное выражение. Попробуйте следующее:

if (preg_match('/^[0-9\,\;\.]+$/', $string)) { 
    // ok 
} else { 
    // not ok 
} 
+1

этот подход будет возвращать 'false' ("не в порядке") для ввода' 1.234'. В то время как OP ожидает, что оно будет действительным: * valid: 1.234 valid: 1,234 invalid: 1.23a недействительный: 1.2_4 * – RomanPerekhrest

+0

Правильно, я добавил точку также. – Nitin

+0

Да, извините, я забыл точку в массиве. – user2113177

2

Решение с использованием 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) 
Смежные вопросы