Regular expression for alphanumeric only, not for numbers

I want to match "3 T1F ROHITE01WMILWWI16", which contains only letter letters and numbers, nothing more. The condition is that it must be both. It should not return true for all alphabetic and all numeric.

Test cases:

  • 3 T1F ROHITE01WMILWI16
  • 3 T1F ROHITE01WMILwI16
  • 3 T1F ROHITE01WMIL.I16
  • 1234
  • aaaa
  • T1F ROHITH01WMILWI16

I use ^ [0-9 AZ] + $, it correctly matches the first and last test case, but also returns true for the fourth test case ie 1234.

+4
source share
4 answers

you can use

^([0-9 A-Z]*[A-Z][0-9 A-Z]*[0-9][0-9 A-Z]*|[0-9 A-Z]*[0-9][0-9 A-Z]*[A-Z][0-9 A-Z]*)$

It matches

  • ^ -

    . 1:
  • [0-9 A-Z]* - 0+
  • [A-Z] - ASCII ( )
  • [0-9 A-Z]* - 0+
  • [0-9] -
  • [0-9 A-Z]* - 0+

    2 , , 1A A1.
  • $ -

, 2 .

regex IDEONE:

s <- c("3 T1F ROHITE01WMILWI16", "3 T1F ROHITE01WMILwI16", "3 T1F ROHITE01WMIL.I16", "1234", "aaaa", "T1F ROHITH01WMILWI16")
grep("^[0-9 A-Z]*[A-Z][0-9 A-Z]*[0-9][0-9 A-Z]*$", s, value=TRUE)

, PCRE:

^(?=[^A-Z]*[A-Z])(?=[^0-9]*[0-9])[0-9 A-Z]*$

(?=[^A-Z]*[A-Z]) , (?=[^0-9]*[0-9]) .

IDEONE:

s <- c("3 T1F ROHITE01WMILWI16", "3 T1F ROHITE01WMILwI16", "3 T1F ROHITE01WMIL.I16", "1234", "aaaa", "T1F ROHITH01WMILWI16")
grep("^(?=[^A-Z]*[A-Z])(?=[^0-9]*[0-9])[0-9 A-Z]*$", s, perl=TRUE, value=TRUE)
+3

@akrun , , ( ) :

str1 <- c("3 T1F MILWWIHE01WMILWWI16", "3 T1F ROHITE01WMILWI16", "3 T1F ROHITE01WMILwI16", "3 T1F ROHITE01WMIL.I16", "1234", "aaaa", "T1F ROHITH01WMILWI16")

str1[grepl("[A-Z ]+", str1) & grepl("[0-9 ]+", str1) & !grepl("[^A-Z0-9 ]", str1)]
# [1] "3 T1F MILWWIHE01WMILWWI16" "3 T1F ROHITE01WMILWI16"    "T1F ROHITH01WMILWI16"
+2

lookahead:

^(?=.*[0-9])(?=.*[A-Z])[0-9 A-Z]+$

str1 <- c("3 T1F MILWWIHE01WMILWWI16", "3 T1F ROHITE01WMILWI16", "3 T1F ROHITE01WMILwI16", "3 T1F ROHITE01WMIL.I16", "1234", "aaaa", "T1F ROHITH01WMILWI16")

grep("^(?=.*[0-9])(?=.*[A-Z])[0-9 A-Z]+$", str1, perl=TRUE, value=TRUE)
# [1] "3 T1F MILWWIHE01WMILWWI16" "3 T1F ROHITE01WMILWI16"    "T1F ROHITH01WMILWI16"
+2

lookahead, , \d, \d non .
, + , .

^(?=\D*\d)[ \d]*[A-Z][ A-Z\d]*$

. regex101 .*? \D*


perl=TRUE "^(?=\\D*\\d)[ \\d]*[A-Z][ A-Z\\d]*$"

0

All Articles