regulares regular online expresiones expresion especiales espacio caracteres blanco c# asp.net regex unicode

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:

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



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:

  1. C: http://en.wikipedia.org/wiki/Zero-width_non-joinero
  2. 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