preg_match: только цифры и запятые - PullRequest
8 голосов
/ 24 сентября 2010

Как мне написать регулярное выражение, которое соответствует только цифрам и запятым?

Я выступил с этим ниже, но он не работает - он принимает и другие знаки препинания!

# check for matches number-alphabets and commas only
  if(!preg_match('/([a-zA-Z0-9]|[a-zA-Z0-9\,])/', $cst_value))
  {
   $error = true;
   echo '<error elementid="usr_username" message="'.$cst_name.' - please use number-alphabets and commas only."/>';
  }

Большое спасибо, Лау

Ответы [ 3 ]

19 голосов
/ 24 сентября 2010

Вы хотите:

/^[a-zA-Z0-9,]+$/

Вам нужны начало ^ и конец $ якоря строки. Без них движок регулярных выражений будет искать любой из этих символов в строке и, если найдет один, он вызовет его через день и скажет, что есть совпадение. С помощью якорей это заставляет двигатель смотреть на всю струну. В основном:

  • /[a-zA-Z0-9,]+/ соответствует, если любой символов алфавитно-цифровой + запятая.
  • /^[a-zA-Z0-9,]+$/ соответствует, если все символов являются буквенно-цифровыми + запятыми.
9 голосов
/ 24 сентября 2010
if(preg_match('/^[0-9a-z,]+$/i', $cst_value)) {
  // valid input..contains only alphabet,number and comma.
}else{
  // invalid
}

Передаем preg_match следующее: /^[0-9a-z,]+$/i

Пояснение:

  • /: разделители регулярных выражений.
  • ^: начало привязки
  • [..]: класс чар
  • 0-9: любая цифра
  • a-z: любой алфавит
  • ,: запятая. запятая не регулярное выражение metachar, так что вам не нужно избегать его
  • +: квантификатор для одного или нескольких. Если пустой ввод считается действительным, изменить + на *
  • $: концевой анкер
  • i: сделать соответствующий случай нечувствительным.
1 голос
/ 24 сентября 2010

Ну, это добавляет еще пару символов, как подчеркивание

/^[\w,]*$ /

Но это должно работать

/^[a-zA-Z0-9,]*$/
...