2017-06-05 26 views
1

私はフォーラムサイトを持っていますが、現在最終版、登録フォームを作成しています。アラビア数字と英数字の英数字と、単語間に最大1文字のスペースのみを含める必要があります。アラビア語と英語のみの英数字1つのスペースでしか入力できません

英語の英数字部分は動作していますが、アラビア語やダブルスペースは使用できません。

私はpreg_match()関数を使用して、ユーザー名入力をRegExと一致させています。

!preg_match('/\p{Arabic}/', $username) && !preg_match('/^[A-Za-z0-9]$/') 
//this is currently inside and if statement, so if they both don't match then it is false. 
+0

。愚かな私:Dですが、あなたの "キャラクタークラス"の意味を理解していません。 – Khalid

+0

@ chris85これは英語ではスムーズに動作しますが、アラビア語では動作しません。ここに私が今持っているものがあります。 'if(!preg_match( '/^[A-Za-z0-9 \ p {InArabic}] + $ /'、$ username)){' – Khalid

+0

'In'はありません。 – chris85

答えて

2

これはすべて1つの正規表現で行うことができますので、あなたはあなたの通常の正規表現の内部Unicodeプロパティを置く必要があります。私は現在持っている何

。また、その文字クラスを数量化する必要があります。そうでない場合は、1文字のみを許可します。この正規表現はそれを行う必要があります。

^[\p{Arabic}a-zA-Z\p{N}]+\h?[\p{N}\p{Arabic}a-zA-Z]*$ 

u修飾子をPHPで使用すると、ユニコードが正常に動作するようになります。

PHPの使用法:

preg_match('/^[\p{Arabic}a-zA-Z\p{N}]+\h?[\p{N}\p{Arabic}a-zA-Z]*$/u', $string); 

デモ:私は固定された第2の部分を持っているchris85 @https://regex101.com/r/fsRchS/2/

関連する問題