c# - regular - regex syntax
regex por aceptar solo caracteres persas (6)
Estoy trabajando en un formulario en el que uno de los validadores personalizados solo debería aceptar caracteres persas ... Utilicé el siguiente código:
var myregex = new Regex(@"^[/u0600-/u06FF]+$");
if (myregex.IsMatch(mytextBox.Text))
{
args.IsValid = true;
}
else
{
args.IsValid = false;
}
pero parece que solo funciona para verificar caracteres árabes y no cubre todos los caracteres persas (carece de estos cuatro گ, چ, ژ). ¿Hay alguna manera de resolver este problema?
Farsi, Dari y Tajik están fuera de mi bailía, pero un poco rebuscando en los gráficos de códigos Unicode me dice que el árabe cubre 5 bloques de código Unicode:
- Árabe: http://www.unicode.org/charts/PDF/U0600.pdf
- Suplemento árabe: http://www.unicode.org/charts/PDF/U0750.pdf
- Árabe Extended-A: http://www.unicode.org/charts/PDF/U08A0.pdf
- Formularios de presentación en árabe-A: http://www.unicode.org/charts/PDF/UFB50.pdf
- Formularios de presentación en árabe-B: http://www.unicode.org/charts/PDF/UFE70.pdf
Puede obtenerlos (al menos algunos de ellos) en expresiones regulares usando bloques con nombre en lugar de rangos de puntos de código explícitos: /p{IsArabicPresentationForms-A}
le dará el 4 ° bloque Unicode en la lista anterior.
También puede leer Persian Computing en Unicode: http://behdad.org/download/Publications/persiancomputing/a007.pdf
No puedo leer Farsi pero veo si uno de los suplementos árabes Unicode tiene las letras que estás buscando.
atención: persianRex está escrito en Javascript; sin embargo, puede usar el código fuente y copiar pegar los caracteres
La detección de caracteres persas es una tarea difícil debido a la variedad de diseños de teclado y sistemas operativos. Me enfrenté al mismo desafío en algún momento antes y decidí escribir una biblioteca de código abierto para solucionar este problema.
puede solucionar su problema de esta manera: persianRex.text.test (yourInput); // devuelve verdadero o falso
aquí está la documentación completa: http://imanmh.github.io/persianRex/
Además de la respuesta aceptada ( https://.com/a/22565376/790811 ), también deberíamos considerar caracteres Zero-width_non-joiner (o نیم فاصله en persa). Desafortunadamente tenemos 2 símbolos para eso. Uno es estándar y el otro no es estándar, pero se usa ampliamente:
- C: http://en.wikipedia.org/wiki/Zero-width_non-joinero
- F: marca de derecha a izquierda ( http://unicode-table.com/en/#200F )
Entonces el regix final puede ser:
^[/u0600-/u06FF/uFB8A/u067E/u0686/u06AF/u200C/u200F]+$
Si desea considerar el " espacio ", puede usar esto:
^[/u0600-/u06FF/uFB8A/u067E/u0686/u06AF/u200C/u200F ]+$
usted puede probarlo JavaScript con esto:
/^[/u0600-/u06FF/uFB8A/u067E/u0686/u06AF7/u200C/u200F ]+$/.test(''ایپسر تو چه میدانی؟'')
Lo que tienes actualmente en tu expresión regular es un rango estándar de símbolos arábigos . Para caracteres adicionales su necesidad de agregarlos a la expresión regular por separado. Aquí están sus códigos:
ژ /u0698
پ /u067E
چ /u0686
گ /u06AF
Entonces, en general, deberías tener
^[/u0600-/u06FF/u0698/u067E/u0686/u06AF]+$
Los bloques nombrados, por ejemplo, / p {Arabic}, cubren toda la secuencia de comandos árabe , no solo los caracteres persas.
Los formularios de presentación (u + FB50-u + FDFF) no se deben usar en el texto, y se deben convertir al rango estándar (u + 0600-u + 06FF).
Para cubrir solo persa, necesitamos lo siguiente:
- El subconjunto de caracteres Farsi fuera del rango estándar árabe, es decir (U + 0621-U + 0624, U + 0626-U + 063A, U + 0641-U + 0642, U + 0644-U + 0648)
- Los signos diacríticos árabes estándar (U + 064B-U + 0652)
- Los 2 signos diacríticos adicionales (U + 0654, U + 0670)
- Los 4 caracteres extrafarsianos "گ چ پ (" (U + 067E, U + 0686, U + 0698, U + 06AF)
- U + 06A9: Kaf persa (formalmente: "Letra árabe Keheh"; notación diferente del árabe Kaf)
- U + 06CC: Farsi Yeh (una notación diferente del árabe Yeh)
- U + 200C: Zero-Width-Non-Joiner
Entonces, la expresión regular resultante sería:
^[/u0621-/u0624/u0626-/u063A/u0641-/u0642/u0644-/u0648/u064B-/u0652/u067E/u0686/u0698/u06AF/u06CC/u06A9/u0654/u670/u200c}]+$
Vea también los ejemplos de caracteres para persa listados aquí:
http://unicode.org/cldr/trac/browser/trunk/common/main/fa.xml