php only allow letters, numbers, spaces and specific symbols using pregmatch

后端 未结 3 980

on my php i use preg_match to validate input texts.

if(preg_match(\'/^[a-zA-Z0-9]+$/\', $firstname)) {
}

But this only allows alp

相关标签:
3条回答
  • 2021-01-31 16:54

    Use

    preg_match('/^[a-z0-9 .\-]+$/i', $firstname)
    
    0 讨论(0)
  • 2021-01-31 17:07

    The only difficult bit here is the dash.

    For spaces and dots, you can simply add them to your character class, like so:

    '/^[a-zA-Z0-9 .]+$/'
    

    Easy.

    The dash is slightly harder because hyphens have special meaning in a character class like this (as you already know, they're used for ranges of characters like a-z). In order to specify a hyphen in a character class, it must be the first character in the class (ie it must not be between two characters, otherwise it is treated as a character range marker).

    So your expression would be:

    '/^[-a-zA-Z0-9 .]+$/'
    

    Hope that helps.

    0 讨论(0)
  • 2021-01-31 17:15

    If you not only want to allow ASCII, then use Unicode properties:

    preg_match('/^[\p{L}\p{N} .-]+$/', $firstname)
    

    \p{L} is any letter in any language, matches also Chinese, Hebrew, Arabic, ... characters.

    \p{N} any kind of numeric character (means also e.g. roman numerals)

    if you want to limit to digits, then use \p{Nd}

    0 讨论(0)
提交回复
热议问题