preg_match: только число-алфавиты и запятые

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

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

# 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."/>'; } 

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

Вы хотите:

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

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

  • /[a-zA-Z0-9,]+/ соответствует, если любой из символов является буквенно-цифровой + запятой.
  • /^[a-zA-Z0-9,]+$/ соответствует, если все символы являются буквенно-цифровыми + запятыми.
 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

Объяснение:

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

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

/^[\w,]*$ /

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

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