\documentclass{article}

\usepackage{xepersian}
\settextfont{XB Niloofar}
\defpersianfont\yasfont{Yas}

\makeatletter
    \if@bidi@csundef{bidi@digits}{% 
        \newcount\bidi@digits
        \XeTeXinterchartokenstate=\@ne
        \newXeTeXintercharclass\bidi@digits@charclass
        \bidi@digits=`\0 \loop \XeTeXcharclass \bidi@digits \bidi@digits@charclass \ifnum\bidi@digits<`\9 \advance\bidi@digits \@ne \repeat
        \bidi@digits=`\۰ \loop \XeTeXcharclass \bidi@digits \bidi@digits@charclass \ifnum\bidi@digits<`\۹ \advance\bidi@digits \@ne \repeat
    }{}
    \newXeTeXintercharclass\qom@leftparen@charclass
    \newXeTeXintercharclass\qom@rightparen@charclass
    \XeTeXcharclass `\( \qom@leftparen@charclass
    \XeTeXcharclass `\) \qom@rightparen@charclass
    \XeTeXcharclass `\[ \qom@leftparen@charclass
    \XeTeXcharclass `\] \qom@rightparen@charclass
    \ifdim\the\XeTeXversion\XeTeXrevision\p@>0.99993\p@
      \chardef\qom@alloc@intercharclass@top=4095
    \else
      \chardef\qom@alloc@intercharclass@top=255
    \fi
    \XeTeXinterchartoks \qom@alloc@intercharclass@top \bidi@digits@charclass = {\BeginSwitchDigitFont}
    \XeTeXinterchartoks \bidi@digits@charclass \qom@alloc@intercharclass@top = {\EndSwitchDigitFont}
    \XeTeXinterchartoks \qom@leftparen@charclass \bidi@digits@charclass = {\BeginSwitchDigitFont}
    \XeTeXinterchartoks \bidi@digits@charclass \qom@rightparen@charclass = {\EndSwitchDigitFont}
    \if@bidi@csundef{if@nonlatin}{%
        \newcommand*{\BeginSwitchDigitFont}{\if@Latin\else\yasfont \fi}
        \newcommand*{\EndSwitchDigitFont}{\if@Latin\else\setpersianfont \fi\egroup}
    }{%
        \newcommand*{\BeginSwitchDigitFont}{\if@nonlatin\yasfont \fi}
        \newcommand*{\EndSwitchDigitFont}{\if@nonlatin\setpersianfont \fi}
    }
\makeatother
\begin{document}
 
 102030405060708090100 
 
 [1020]
(3040)

{\yasfont  [1030]} 

[10[20[30[40]50]60]70]

(10(20(30(40)50)60)70)

\end{document}
