Je souhaite que l’expression régulière n’accepte que les caractères arabes, les espaces et les nombres.
Les numéros ne doivent pas obligatoirement être en arabe.
J'ai trouvé l'expression suivante:
^[\u0621-\u064A]+$
qui n'accepte que les caractères arabes alors que j'ai besoin de caractères arabes, d'espaces et de chiffres.
Ajoutez simplement 1-9
(au format Unicode) à votre classe de personnages:
^[\u0621-\u064A0-9 ]+$
OU ajoutez \u0660-\u0669
à la classe de caractères correspondant à la plage des nombres arabes :
^[\u0621-\u064A\u0660-\u0669 ]+$
Vous pouvez utiliser:
^[\u0621-\u064A\s\p{N}]+$
\p{N}
correspond à n'importe quel chiffre numérique unicode.
Pour ne faire correspondre que les chiffres ASCII, utilisez:
^[\u0621-\u064A\s0-9]+$
EDIT: Il vaut mieux utiliser cette expression rationnelle:
^[\p{Arabic}\s\p{N}]+$
vous pouvez utiliser [ء-ي] cela a fonctionné pour moi en javascript Jquery forme.validate rules
pour mon exemple, je veux forcer l'utilisateur à insérer 3 caractères
[a-zA-Z ء-ي]
Avec beaucoup d'essais et de modifications, j'ai obtenu ceci pour les noms persans:
[گچپژیلفقهمو ء-ي]+$
Simple, utilisez ce code:
^[-ۿ]+$
Cela fonctionne pour les nombres pairs arabe/persan.
En PHP, utilisez ceci:
preg_replace("/\p{Arabic}/u", 'x', 'abc123ابت');// will replace arabic letters with "x".
Remarque : Pour que \p{Arabic}
corresponde aux lettres arabes, vous devez passer le modificateur u
(pour unicode) à la fin.
function HasArabicCharacters(string text)
{
var regex = new RegExp(
"[\u0600-\u06ff]|[\u0750-\u077f]|[\ufb50-\ufc3f]|[\ufe70-\ufefc]");
return regex.test(text);
}