preg_match:仅限数字字母和逗号

时间:2010-09-24 13:22:15

标签: php regex 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."/>';
  }

非常感谢, 刘

3 个答案:

答案 0 :(得分:19)

你想:

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

您需要字符串锚点的起始^和结束$。如果没有它们,正则表达式引擎会在字符串中查找这些字符中的任何字符,如果找到它,它会在一天之内调用它并说它是匹配的。使用锚点,它会强制引擎查看整个字符串。基本上是:

  • /[a-zA-Z0-9,]+/匹配,如果任何字符是字母数字+逗号。
  • 如果所有字符都是字母数字+逗号,则
  • /^[a-zA-Z0-9,]+$/匹配。

答案 1 :(得分: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

说明:

  • /:正则表达式分隔符。
  • ^:启动锚
  • [..]:Char class
  • 0-9:任何数字
  • a-z:任何字母
  • ,:逗号。逗号不是正则表达式 metachar,所以你无需逃避它
  • +:一个或多个的量词。如果 空输入被认为有效, 将+更改为*
  • $:结束锚
  • i:制作匹配案例 不敏感的。

答案 2 :(得分:1)

嗯,这会增加几个字符,如下划线

/^[\w,]*$ /

但这应该有用

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