简单的正则表达式以匹配某些字符并排除其他字符

时间:2019-04-01 18:48:34

标签: php regex character

我需要一个正则表达式进行preg_match才能接受除lLvV02以外的所有字母数字字符

我尝试过

^[a-zA-Z0-9][^lLvV02]*$

除了lLvV02以外,它都可以正常工作,但它也可以接受其他字符,例如SPACE,ù,@,#等...

我应该如何更改?

3 个答案:

答案 0 :(得分:0)

您可以使用

^(?:(?![lLvV02])[a-zA-Z0-9])*$

详细信息

  • ^-字符串的开头
  • (?:-一个非捕获组的开始
    • (?![lLvV02])[a-zA-Z0-9]-否定字符,它不是字符类中位于负前瞻内的字符之一。
  • )*-非捕获组的结尾,重复0个或更多
  • $-字符串结尾

请参见Regulex graph

enter image description here

答案 1 :(得分:0)

我知道您要求使用正则表达式,但是您可以先测试字母数字,并且只有在通过后才能检查其他字符是否存在:

if(ctype_alnum($string) && !preg_match('/[lLvV02]/', $string)) {
    //pass
} else {
    //fail
}

或者可以替代preg_match('/^[^lLvV02]+$/', $string)

答案 2 :(得分:0)

最简单的可能是:^[a-km-uw-zA-KM-UW-Z13-9]*$。 我并不是说它很漂亮,但是可以达到预期的效果。