如何创建正则表达式以接受字母,数字和特殊字符的组合,但不接受单个字母或数字或特殊字符的组合

时间:2017-07-17 08:03:43

标签: php regex

我想创建正则表达式,它将接受字母,特殊字符,数字的组合,但不仅仅是字母或特殊字符或数字

例如: 它应该接受

  1. 1片黑面包(小麦)
  2. 1汤匙
  3. 1/2杯
  4. 但它不应该接受

    1. 切片黑面包
    2. 1
    3. @#%&安培;%&安培; *
    4. 这就是我的尝试:

      regex:/^(?![0-9]*$)[a-zA-Z0-9\s\-()\/ ]+$/'
      

      此正则表达式允许用户接受字母,数字和特殊字符的组合,但不仅仅是数字。

2 个答案:

答案 0 :(得分:2)

通过将一些负面预测链接到正则表达式,所以当同一行中只有1个类型+空格时,它将不匹配。

$str = '1 Slice brown bread (wheat) 
1 Tbsp 
1/2 cup 
Slice brown bread 
1
@#%&%&*';

$re = '/^(?!\W+$)(?![\d\s]+$)(?![A-Za-z\s]+$).+$/m';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
var_dump($matches);

顺便说一下,在例子中,所有的接受似乎都以数字开头,并且有字母 因此,对于$re = '/^(?=.*[A-Za-z])\d+.+$/m';,要匹配以数字开头且至少包含字母的行,它也只会匹配前3个示例。

答案 1 :(得分:1)

^(\d+)(\/\d)?(\s\w+)+(\s\(\w+\))?

也许这会帮助您并满足您的要求。

Here is testing example you can test here