preg_match: number-alphabets and commas only
How do I write a regular expression which matches number-alphabets and commas only?
I came out with this one below but it doesnt work - it accepts other punctuation marks as well!
# 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."/>';
}
Many thanks, Lau
You want:
/^[a-zA-Z0-9,]+$/
You need the start ^
and end $
of string anchors. Without them the regex engine will look for any of those characters in the string and if it finds one, it will call it a day and say there's a match. With the anchors, it forces the engine to look at the whole string. Basically:
/[a-zA-Z0-9,]+/
matches if any of the characters are alphanumeric + comma./^[a-zA-Z0-9,]+$/
matches if all of the characters are alphanumeric + comma.
if(preg_match('/^[0-9a-z,]+$/i', $cst_value)) {
// valid input..contains only alphabet,number and comma.
}else{
// invalid
}
We pass the following to preg_match : /^[0-9a-z,]+$/i
Explanation:
/
: regex delimiters.^
: start anchor[..]
: Char class0-9
: any digita-z
: any alphabet,
: a comma. comma is not a regex metachar, so you need not escape it+
: quantifier for one or more. If an empty input is considered valid, change+
to*
$
: end anchori
: to make the matching case insensitive.
Well this adds a couple more characters like underscore
/^[\w,]*$/
But this should work
/^[a-zA-Z0-9,]*$/
精彩评论