dthtvk3666
2019-04-01 18:48 阅读 230
已采纳

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

I need a regex for preg_match to accept all alphanumeric characters except l, L, v, V, 0, 2.

I've tried

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

It works good excluding lLvV02 but it also accept other characters like SPACE,ù,@,#, etc...

How should I change it?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • 已采纳
    duanfeng3879 duanfeng3879 2019-04-01 18:52

    You may use

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

    Details

    • ^ - start of string
    • (?: - start of a non-capturing group
      • (?![lLvV02])[a-zA-Z0-9] - an alnum char that is not one of the chars inside the character class residing inside a negative lookahead
    • )* - end of the non-capturing group, 0 or more repetitions
    • $ - end of string

    See the Regulex graph:

    enter image description here

    点赞 评论 复制链接分享
  • doujing5150 doujing5150 2019-04-01 19:04

    I know you asked for a Regex, but you can test for alphanumeric first and only if that passes check that the others are NOT present:

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

    Or possibly substitute preg_match('/^[^lLvV02]+$/', $string).

    点赞 评论 复制链接分享
  • duanmo5724 duanmo5724 2019-04-01 19:16

    Easiest would probably be: ^[a-km-uw-zA-KM-UW-Z13-9]*$. I'm not saying that it's pretty but it does what it's supposed to.

    点赞 评论 复制链接分享

相关推荐