php допускает только буквы, цифры, пробелы и конкретные символы, используя pregmatch

на моем php я использую preg_match для проверки входных текстов.

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

Но это позволяет только буквенно-цифровое и не допускать пробелов. Я хочу разрешить пробелы, альфа и числовые. и период (.) и тире (-)

Пожалуйста, помогите мне здесь? заранее спасибо.

использование

 preg_match('/^[a-z0-9 .\-]+$/i', $firstname) 

Если вы не только хотите разрешить ASCII, но и используйте свойства Unicode :

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

\p{L} – любая буква на любом языке, соответствует и китайским, ивриту, арабским, … символам.

\p{N} любой тип числового символа (означает, например, римские цифры)

если вы хотите ограничить цифры, используйте \p{Nd}

Единственный трудный бит здесь – тире.

Для пробелов и точек вы можете просто добавить их в свой класс символов, например:

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

Легко.

Черточка немного сложнее, потому что дефисы имеют особое значение в классе символов, подобном этому (как вы уже знаете, они используются для диапазонов символов, таких как az ). Чтобы указать дефис в классе символов, он должен быть первым символом в классе (т. Е. Он не должен находиться между двумя символами, в противном случае он рассматривается как маркер диапазона символов).

Таким образом, ваше выражение будет:

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

Надеюсь, это поможет.