正規表現を使用して文字列を検証するにはどうすればよいですか?
個別のスラッシュの長さを{4}/{2}/{2}と正確にしたいと思います
Unicodeの範囲は[\u06F0-\u06F9]です。
長さチェックに問題があります。
次の正規表現を使用できます。
"^[\u06F0-\u06F9]{4}/[\u06F0-\u06F9]{2}/[\u06F0-\u06F9]{2}$"
^
文字列の先頭で一致を開始するためのと、文字列$
の最後で一致を終了させるためのが欠落している可能性があります。これらの変更がないと、文字列は長くなりますが、式が含まれていると一致として生成されます。
この変更により、文字列にパターンが含まれ、ターゲットパターンの左側または右側に余分な文字がない場合にのみ、一致が成功します。
この正規表現はあなたのために働くはずです:
"(^|[^\u06F0-\u06F9]{1})[\u06F0-\u06F9]{4}/[\u06F0-\u06F9]{2}/[\u06F0-\u06F9]{2}([^\u06F0-\u06F9]{1}|$)"
次の両方の条件で日付式を一致させます。
条件1:文字列の先頭か、文字範囲外の1文字の後にある必要があります[\u06F0-\u06F9]
条件2:文字列の最後か、文字範囲外の1文字の前にある必要があります[\u06F0-\u06F9]
これは、この文字列の式とは一致しません。
How can I validate ۱۱۳۹۱/۰۹/۰۹ string with Regex
-------------------^5Numbers, not matched
またはこの文字列:
How can I validate ۱۱۳۹۱/۰۹/۰۹۹ string with Regex
------------------------------^Three numbers, not matched
ただし、この文字列の日付式と一致します。
How can I validate۱۳۹۱/۰۹/۰۹string with Regex
------------------^---------^ No whitespaces above ^, the expression is matched though
これを回避したい場合、つまり、日付式のみをその前後の空白(および改行)と一致させる場合は、次の正規表現を使用します。
(^|[ \t\n]{1})[\u06F0-\u06F9]{4}/[\u06F0-\u06F9]{2}/[\u06F0-\u06F9]{2}([ \t\n]{1}|$)
お役に立てば幸いです。