Как написать регулярное выражение, которое соответствует только числовым алфавитам и запятым?
Я вышел с этим ниже, но он не работает – он принимает и другие знаки препинания!
# 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,]*$/